Kafes üçgen için ana eğriliği hesaplamanın en basit yolu nedir?


20

Bir ağım var ve her üçgenin etrafındaki bölgede, ana eğrilik yönlerinin bir tahminini hesaplamak istiyorum. Daha önce hiç böyle bir şey yapmadım ve Wikipedia çok yardımcı olmuyor. Beni bu tahmini hesaplamama yardımcı olabilecek basit bir algoritma tanımlayabilir veya gösterebilir misiniz?

Tüm köşelerin pozisyonlarını ve normallerini bildiğimi varsayalım.

Yanıtlar:


24

Bir cilt gölgelendirici için örgü eğriliği tahminine ihtiyaç duyduğumda, yerleştiğim algoritma şuydu:

İlk olarak, ağdaki her kenar için skaler bir eğrilik hesapladım. Kenarın ve normalleri eğriliğini şu şekilde tahmin ettim:n 1 , n 2p1,p2n1,n2

eğrilik=(n2-n1)(p2-p1)|p2-p1|2

Bu, kenar boyunca yansıtılan normallerdeki farkı, kenar uzunluğunun bir kısmı olarak hesaplar. (Bu formülü nasıl bulduğum için aşağıya bakın.)

Sonra, her köşe için ona dokunan tüm kenarların eğriliklerine baktım. Benim durumumda, sadece "ortalama eğrilik" için skaler bir tahmin istedim, bu yüzden her köşede tüm kenar eğrilerinin mutlak değerlerinin geometrik ortalamasını aldım. Sizin durumunuz için, minimum ve maksimum eğrilikleri bulabilir ve bu kenarları ana eğrilik yönleri olarak alabilirsiniz (belki de normal tepe noktasıyla ortonormalize edebilirsiniz). Bu biraz kaba, ama yapmak istediğiniz şey için yeterince iyi bir sonuç verebilir.


Bu formülün motivasyonu, bir çevreye uygulandığında 2D'de neler olduğuna bakmaktır:

daire üzerinde iki noktaya uygulanan eğrilik formülü

Bir yarıçap olduğunu varsayalım (bu yüzden eğriliği ) ve daire üzerinde normalleriyle iki . Dairenin merkezine göre noktaların konumları, bir dairenin veya kürenin normallerinin her zaman doğrudan merkezinden işaret ettiği özellik nedeniyle ve .1 / r n 1 , n 2 p 1 = r n 1 p 2 = r n 2r1/rn1,n2p1=rn1p2=rn2

Bu nedenle yarıçapıveya. Ancak genel olarak, tepe konumları dairenin merkezine göreli olmayacaktır. çıkararak bu : | p 2 | / | n 2 | p 2 - p 1r=|p1|/|n1||p2|/|n2|

p2-p1=rn2-rn1=r(n2-n1)r=|p2-p1||n2-n1|eğrilik=1r=|n2-n1||p2-p1|

Sonuç sadece daireler ve küreler için kesindir. Bununla birlikte, biraz daha "toleranslı" hale getirmek için genişletebilir ve keyfi 3B kafeslerde kullanabiliriz ve makul derecede iyi çalışıyor gibi görünüyor. Önce vektörünü kenar yönüne, formülü daha "hoşgörülü" hale . Bu, bu iki vektörün tam olarak paralel olmamasına izin verir (daire durumunda olduğu gibi); paralel olmayan herhangi bir bileşeni yansıtacağız. Bunu normalleştirilmiş kenar vektörü ile : p 2 - p 1 eğriliğin2-n1p2-p1

eğrilik=(n2-n1)normalleştirmek(p2-p1)|p2-p1|=(n2-n1)(p2-p1)/|p2-p1||p2-p1|=(n2-n1)(p2-p1)|p2-p1|2

Et voilà, bu cevabın tepesinde ortaya çıkan formül var. Bu arada, imzalı projeksiyonu (nokta ürün) kullanmanın iyi bir yan yararı , formülün daha sonra imzalı bir eğrilik vermesidir: dışbükey için pozitif ve içbükey yüzeyler için negatif.


Kullanmayı hayal edebildiğim, ancak denemediğim başka bir yaklaşım , her tepe noktasında yüzeyin ikinci temel formunu tahmin etmek olacaktır . Bu, tepe noktasında teğet bir temel oluşturarak, ardından tüm komşu köşeleri bu teğet boşluğuna dönüştürerek ve en uygun 2FF matrisini bulmak için en az kareler kullanarak yapılabilir. O zaman ana eğrilik yönleri bu matrisin özvektörleri olacaktır. Bu, herhangi bir kenarı açıkça bu yönlere işaret etmeden komşu köşeler tarafından "ima edilen" eğrilik yönlerini bulmanıza izin verebileceği için ilginç görünmektedir, ancak diğer taraftan çok daha fazla kod, daha fazla hesaplama ve belki de daha az sayısal olarak sağlamdır.

Bu yaklaşımı benimseyen bir makale, "Eğrileri ve Üçgen Ağlarda Türevlerini Tahmin Etme" Rusinkiewicz'dir . Üçgen başına en uygun 2FF matrisini tahmin ederek, ardından köşe başına matrislerin ortalamasını hesaplayarak çalışır (pürüzsüz normallerin nasıl hesaplandığına benzer).


1
Bu önemliyse , cevabınızı burada kullandım blender.stackexchange.com/questions/146819/… ama p1 etrafındaki açıyı kullanarak bir ağırlıklandırma ekledim. Bunu değerli buluyor musun bilmiyor musun? Neyse yorum yapmaktan çekinmeyin. Teşekkürler.
limon

20

Mükemmel @NathanReed cevabına başka bir yol eklemek için, ayrı bir Laplace-Beltrami ile elde edilebilen ortalama ve gauss eğriliğini kullanabilirsiniz.

Kafanızdaki 1 halkalı mahallesinin varsayalımvben

                                         resim açıklamasını buraya girin

bir(vben)13vj

f(vben)

ΔSf(vben)=12bir(vben)ΣvjN-1(vben)(cÖtαbenj+cÖtβbenj)(f(vj)-f(vben))

vjN-1(vben)vben

v

'H=12||ΔSv||

θj

                                        resim açıklamasını buraya girin

Gauss eğriliği:

K=(2π-Σjθj)/bir

Tüm bu acıdan sonra, ana ayrık eğrilikler aşağıdakiler tarafından verilir:

k1='H+'H2-K  ve  k2='H-'H2-K

Konu ile ilgileniyorsanız (ve bu gönderiye bir miktar referans eklemek isterseniz) mükemmel bir okuma şudur: Üçgenleştirilmiş 2-Manifoldlar için Ayrık Diferansiyel-Geometri Operatörleri [Meyer et al. 2003].

Görüntüler için dersim için aldığım bazı notlarda bulduğum için eski profesör Niloy Mitra'ya teşekkür ediyorum.


Her iki cevap da çok iyi, benim için zor oldu. En basit yolu sorduğumdan, Nathan'ın pastayı aldığını düşünüyorum.
ap_

2
K=(π-Σjθj)/birmbenxed

@teodron Sınır köşeleri için ortalama eğrilik hakkında herhangi bir görüşünüz olabilir mi? Böyle bir şey tanımlanabilir mi?
Museful

vben

-1

@ Nathan-Reed: Sadece Nathan-Reed'in cevabına bir soru: Geometrik anlamı neden kullandınız? Bu Gauss eğriliğinden sonra "modellenmiş" olduğu için miydi?


3
Yeni bir sorunuz varsa, lütfen Soru Sor düğmesini tıklayarak sorun . Bağlam sağlamaya yardımcı oluyorsa bu sorunun bağlantısını ekleyin. - Yorumdan
Dragonseel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.