メッシュ三角形の主曲率を計算する最も簡単な方法は何ですか?


19

メッシュがあり、各三角形の周囲の領域で、主な曲率方向の推定値を計算します。私は以前にこのようなことをしたことがなく、ウィキペディアはあまり役に立たない。この見積もりを計算するのに役立つ簡単なアルゴリズムを説明したり、指摘したりできますか?

すべての頂点の位置と法線を知っていると仮定します。

回答:


24

スキンシェーダーのメッシュ曲率の推定値が必要な場合、最終的に解決したアルゴリズムは次のとおりです。

まず、メッシュの各エッジのスカラー曲率を計算しました。エッジの位置がp1,p2、法線がn1,n2場合、曲率は次のように推定されます。

curvature=(n2n1)(p2p1)|p2p1|2

これは、エッジに沿って投影された法線の差を、エッジの長さの一部として計算します。(この式を思いついた方法については、以下を参照してください。)

次に、各頂点について、それに接するすべてのエッジの曲率を調べました。私の場合、「平均曲率」のスカラー推定が必要だったため、各頂点でのすべてのエッジ曲率の絶対値の幾何平均を取ることになりました。あなたの場合、最小と最大の曲率を見つけて、それらのエッジを主要な曲率方向とすることができます(頂点法線で正規化するかもしれません)。それは少し荒いですが、それはあなたがやりたいことのためにあなたに十分な良い結果を与えるかもしれません。


この式の動機は、円に適用したときに2Dで何が起こるかを見ることです。

円上の2点に適用される曲率公式

半径円があり(その曲率が1 / r)、円上に2つの点があり、法線がn 1n 2であるとします。円の中心に対する点の位置は、円または球の法線が常に中心から直接指すという性質により、p 1 = r n 1およびp 2 = r n 2になります。r1/rn1,n2p1=rn1p2=rn2

したがって、として半径を回復できますp 1 | / | n 1 | または| p 2 | / | n 2 | 。ただし、一般に、頂点の位置は円の中心に対して相対的ではありません。これを回避するには、p 2p 1の2つを引きます。 r=|p1|/|n1||p2|/|n2|

p2p1=rn2rn1=r(n2n1)r=|p2p1||n2n1|curvature=1r=|n2n1||p2p1|

結果は、円と球についてのみ正確です。ただし、これを拡張してもう少し「寛容」にし、任意の3Dメッシュで使用することができます。最初にベクトルをエッジの方向p 2p 1に射影することにより、式をより「寛容」にすることができます。これにより、これらの2つのベクトルは正確に平行ではありません(円の場合)。並列ではないコンポーネントをすべて除外します。これを行うには、正規化されたエッジベクトルで点を打ちます。 曲率n2n1p2p1

curvature=(n2n1)normalize(p2p1)|p2p1|=(n2n1)(p2p1)/|p2p1||p2p1|=(n2n1)(p2p1)|p2p1|2

そして、この答えの一番上に現れた式があります。ところで、符号付き投影(ドット積)を使用することの良い利点は、式が符号付き曲率を与えることです:凸面では正、凹面では負です。


私が使用を想像できるもう1つのアプローチは、試していませんが、各頂点での表面の2番目の基本的な形状を推定することです。これは、頂点に接線基底を設定してから、すべての隣接する頂点をその接線空間に変換し、最小二乗法を使用して最適な2FFマトリックスを見つけることで実行できます。その場合、主な曲率方向はその行列の固有ベクトルになります。これは、それらの方向を明示的に指すエッジなしで、隣接する頂点によって「暗示された」曲率方向を見つけることができるため、興味深いように見えますが、一方で、より多くのコード、より多くの計算、そしておそらく数値的に堅牢ではありません。

このアプローチを採用した論文は、Rusinkiewiczの「三角形メッシュ上の曲率とその派生物の推定」です。これは、三角形ごとに最適な2FFマトリックスを推定し、頂点ごとにマトリックスを平均化することで機能します(法線がどのように滑らかに計算されるかに似ています)。


1
参考までにblender.stackexchange.com / questions / 146819 / ...で答えを使用しましたが、p1の周りの角度を使用して重み付けを追加しました。あなたがそれを価値があると思うかどうかわかりませんか?とにかくコメントしてください。ありがとう。
レモン

19

優れた@NathanReedの回答に別の方法を追加するだけで、離散ラプラスベルトラミで得られる平均曲率とガウス曲率を使用できます。

vi

                                         ここに画像の説明を入力してください

A(vi)13vj

f(vi)

ΔSf(vi)=12A(vi)vjN1(vi)(cotαij+cotβij)(f(vj)f(vi))

vjN1(vi)vi

v

H=12||ΔSv||

θj

                                        ここに画像の説明を入力してください

ガウス曲率は次のとおりです。

K=(2πjθj)/A

この痛みのすべての後、主要な離散的な曲率は次のように与えられます。

k1=H+H2K  and  k2=HH2K

主題に興味がある場合(およびこの投稿への参照を追加する場合)、優れた読み物は次のとおり です。三角形分割2多様体の離散微分幾何演算子 [Meyer et al。2003]。

画像については、前教授のNiloy Mitraに感謝します。彼の講義のために取ったメモで見つけたからです。


両方の答えは本当に良いです、私にとっては選ぶのが大変でした。私が最も簡単な方法について尋ねたので、私はネイサンがケーキを取ると思う。
ap_

2
K=(πjθj)/Amixed

@teodron境界頂点の平均曲率に関する洞察はありますか?そのようなことは定義できますか?
Museful

vi

-1

@ Nathan-Reed:Nathan-Reedの答えに対する質問:なぜ幾何平均を使用したのですか?それは、ガウス曲率の後に「モデル化」されているからですか?


3
新しい質問がある場合は、「質問する」ボタンをクリックして質問してください。コンテキストの提供に役立つ場合は、この質問へのリンクを含めてください。- レビューから
Dragonseel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.