2008-10-23 16 views
5

2B'de tanımlanan bir örtülü skaler alanım var, 2B'deki her nokta için kesin bir skaler değer hesaplaması ancak biraz karmaşık bir hesaplamasını yapabilirim.
Bu yüzeyin bir iso çizgisini çizmek istiyorum, '0' değerinin çizgisi olsun. Fonksiyonun kendisi süreklidir, ancak '0' izo-hattı birden çok sürekli örneğe sahip olabilir ve hepsinin bağlı olduğu garanti edilmez.
Her pikselin değerinin hesaplanması bir seçenek değildir, çünkü bu çok fazla zaman alır - birkaç saniye içinde ve bunun mümkün olduğunca gerçek zamanlı olması gerekir.2B örtülü bir skaler alanın bir ISO çizgisi çizme

Şu anda kullanmakta olduğum şey, bir tür dört ağaç olarak düşünülebilen, özyinelemeli bir boşluk bölümüdür. Alanın ilk, çok kaba bir örneklemini alıyorum ve pozitiften negatif değerlere geçişi içeren bir kare bulursam, onu tekrar 4 küçük kareye bölüyorum ve tekrar piksel seviyesinde durarak tekrar kontrol ediyorum. Pozitif-negatif geçiş, 4 köşesinde bir örnekleme ile tespit edilir. Bu çalışma oldukça iyi, olmadığı zamanlar hariç. Çizilen izografik çizgiler bazen kesilir çünkü bir kenarın küçük bir alanında meydana gelen ve bir karenin köşesini geçmeyen geçişler için geçiş tespiti başarısız olur.

Bu ayarda, ISO çizgisi çizimi yapmanın daha iyi bir yolu var mı?

cevap

6

Uyarlamalı biçimlendirmeyi (tanımladığınız yönteme benzer) ve genel olarak kontur çizimi ile ilgili diğer sorunları ele alan http://web.archive.org/web/20140718130446/http://members.bellatlantic.net/~vze2vrva/thesis.html burada açıklanan algoritmalarla çok fazla başarı elde ettim.

Her bir piksele bakmadan, bir işlevin tüm konturlarını bulmanın genel bir yolu yoktur. Fonksiyonun genellikle negatif olduğu bir bölgede, bir bölgenin sadece fonksiyonun pozitif olduğu bir pikselin büyüklüğünde olduğu çok küçük kapalı bir çevre çizgisi olabilir. Eğer pozitif bölgeye bir örnek yerleştirirseniz yeterince iyi örneklemediğiniz sürece, orada olduğunu bilmenin genel bir yolu yoktur.

İşleviniz yeterince düzgün değilse, bu küçük kapalı hatların nerede olduğunu tahmin edebilirsiniz, çünkü buradaki işlevler modülü çevreleyen bir bölgede küçük olur. Örnekleme daha sonra sadece bu bölgelerde rafine edilebilir.

+0

Tezin bağlantısı kesildi (404). – IAbstract

+1

Bağlantı archive.org'a yönlendirildi –