2009-05-01 11 views

答えて

9

trimeshがであると仮定すると、(凸であるか否かにかかわらず)方法があります。

dmckeeが指摘しているように、一般的なアプローチでは、各表面三角形から四面体を構築し、明らかな数学を適用して各tetの質量と瞬間の寄与を合計します。そのトリックは、身体の表面が、あなたの基準点が何であっても見えるときに、内部のポケットを作る凹部を有する場合に起こる。

だから、始めるには基準点を選んでください(モデル座標の原点はうまくいくでしょう)。本体の内部にいる必要もありません。すべての三角形について、その三角形の3つの点を基準点に接続して四面体を形成する。ここではトリックです:三角形のサーフェス法線を使って、三角形が基準点に近づいたり遠ざかったりしているかどうかを調べます(これは法線の内積の符号と重心を示すベクトルを見て見つけることができます三角形の)。三角形が基準点から離れている場合は、その質量とモーメントを通常どおり扱いますが、基準点に向かっている場合(基準点とソリッドボディの間に空白があることを示唆)、そのテートの結果を無効にします。

効果的に、これはボリュームのオーバーカウントチャンクであり、一度それらの領域がソリッドボディの一部ではないことが示されたら修正します。身体に弾力のあるフランジとグロテスクな折り目がたくさんある場合(その画像はありますか?)、ボリュームの特定の部分は重大な要素によって過剰にカウントされることがありますが、メッシュがあればそれを取り除くのに十分な時間だけ減算されます閉まっている。このようにして、オブジェクト内の空間の内部の泡を処理することもできます(法線が正しく設定されていると仮定して)。さらに、各三角形は独立して処理できるので、自由に並列化することができます。楽しい!

アフター・ザ・ドット・プロダクトがゼロまたはそれに近い値を与えるときに何が起こるのだろうか。これは、三角形の面が平行(法線が垂直)である場合にのみ起こり、基準点への方向を示します。つまり、tetの貢献度を加算または減算する決定は、tetがとにかく何かに貢献しない場合にのみ疑問があります。

+2

ニース。私はこれを見たはずです。ポイントがシェイプの内部か外部かを知ることは、古い "counts the crossings"アプローチの拡張です。 – dmckee

1

私はvtkMassProperties.を見ています。これは、ボリュームを囲むサーフェスを仮定すると、これを計算するためのかなり堅牢なアルゴリズムです。

1

選択した内部ポイントの周りにtetrahedronsのセットにオブジェクトを分解します。 (それは各三角形の面要素と選択された中心点を使用しているソリッドです)

各要素の音量を調べることができます。 moment of inertiaも利用できるはずです。

サーフェスが凸でないと面倒になります。


私は命名法で覚えていないように思え、スキューは私が望む形容詞ではありません。私は非正規を意味する。

+0

オブジェクトが凸でない場合(そして時にはそれがそうであっても)、tetsへのテッセレーションは、単に質量を直接計算することよりはるかに複雑です。 –

+0

@Reed Copsey:私はあなたの言葉を受け取ります。私が提供したソリューションは確かに素朴です。 – dmckee

1

多面体が複雑な場合は、多次元積分によく使用されるモンテカルロ積分を使用することを検討してください。囲むハイパーキューブが必要です。多面体の内部または外部にある点があるかどうかをテストする必要があります。そして、あなたはモンテカルロの統合が遅いので、忍耐強くなる必要があります。

ウィキペディアでいつものように開始してから、外部リンクのページに従ってください。

(モンテカルロの統合に慣れていない人は、ここで質量を計算する方法を教えてください。)ハイパーキューブを含むポイントをピックします。point_totalカウンタに追加します。これは、たくさんの(収束とエラーバインド見積もりを参照してください。)次に

mass_polyhedron/mass_hypercube \approx points_internal/points_total

慣性モーメントのために、あなたは基準軸点の距離の二乗で各カウントの重み付け。

トリッキーな部分は、ポイントが内側にあるかどうかをテストすることですあなたの多面体の外にあります。そのための計算幾何学アルゴリズムがあると確信しています。

1

これは、D. Eberlyの「Game Physics、Second Edition」という書籍でカバーされています。 chapter 2.5.5とサンプルコードはオンラインで入手できます。 (ちょうどそれを見つけたが、まだ試していない)

また、多面体は数式のために凸である必要はないことに注意してください。ちょうどsimpleでなければなりません。

関連する問題