剛体シミュレーションでは、(必ずしも凸面ではない)物体の境界を表す三角形のメッシュと内部の一定の密度を仮定すると、質量と慣性テンソル(慣性モーメント)を計算したいと思います。多面体の質量と慣性モーメントはどのように計算できますか?
答えて
trimeshがであると仮定すると、(凸であるか否かにかかわらず)方法があります。
dmckeeが指摘しているように、一般的なアプローチでは、各表面三角形から四面体を構築し、明らかな数学を適用して各tetの質量と瞬間の寄与を合計します。そのトリックは、身体の表面が、あなたの基準点が何であっても見えるときに、内部のポケットを作る凹部を有する場合に起こる。
だから、始めるには基準点を選んでください(モデル座標の原点はうまくいくでしょう)。本体の内部にいる必要もありません。すべての三角形について、その三角形の3つの点を基準点に接続して四面体を形成する。ここではトリックです:三角形のサーフェス法線を使って、三角形が基準点に近づいたり遠ざかったりしているかどうかを調べます(これは法線の内積の符号と重心を示すベクトルを見て見つけることができます三角形の)。三角形が基準点から離れている場合は、その質量とモーメントを通常どおり扱いますが、基準点に向かっている場合(基準点とソリッドボディの間に空白があることを示唆)、そのテートの結果を無効にします。
効果的に、これはボリュームのオーバーカウントチャンクであり、一度それらの領域がソリッドボディの一部ではないことが示されたら修正します。身体に弾力のあるフランジとグロテスクな折り目がたくさんある場合(その画像はありますか?)、ボリュームの特定の部分は重大な要素によって過剰にカウントされることがありますが、メッシュがあればそれを取り除くのに十分な時間だけ減算されます閉まっている。このようにして、オブジェクト内の空間の内部の泡を処理することもできます(法線が正しく設定されていると仮定して)。さらに、各三角形は独立して処理できるので、自由に並列化することができます。楽しい!
アフター・ザ・ドット・プロダクトがゼロまたはそれに近い値を与えるときに何が起こるのだろうか。これは、三角形の面が平行(法線が垂直)である場合にのみ起こり、基準点への方向を示します。つまり、tetの貢献度を加算または減算する決定は、tetがとにかく何かに貢献しない場合にのみ疑問があります。
私はvtkMassProperties.を見ています。これは、ボリュームを囲むサーフェスを仮定すると、これを計算するためのかなり堅牢なアルゴリズムです。
選択した内部ポイントの周りにtetrahedronsのセットにオブジェクトを分解します。 (それは各三角形の面要素と選択された中心点を使用しているソリッドです)
各要素の音量を調べることができます。 moment of inertiaも利用できるはずです。
サーフェスが凸でないと面倒になります。
私は命名法で覚えていないように思え、スキューは私が望む形容詞ではありません。私は非正規を意味する。
オブジェクトが凸でない場合(そして時にはそれがそうであっても)、tetsへのテッセレーションは、単に質量を直接計算することよりはるかに複雑です。 –
@Reed Copsey:私はあなたの言葉を受け取ります。私が提供したソリューションは確かに素朴です。 – dmckee
多面体が複雑な場合は、多次元積分によく使用されるモンテカルロ積分を使用することを検討してください。囲むハイパーキューブが必要です。多面体の内部または外部にある点があるかどうかをテストする必要があります。そして、あなたはモンテカルロの統合が遅いので、忍耐強くなる必要があります。
ウィキペディアでいつものように開始してから、外部リンクのページに従ってください。
(モンテカルロの統合に慣れていない人は、ここで質量を計算する方法を教えてください。)ハイパーキューブを含むポイントをピックします。point_total
カウンタに追加します。これは、たくさんの(収束とエラーバインド見積もりを参照してください。)次に
mass_polyhedron/mass_hypercube \approx points_internal/points_total
。
慣性モーメントのために、あなたは基準軸点の距離の二乗で各カウントの重み付け。
トリッキーな部分は、ポイントが内側にあるかどうかをテストすることですあなたの多面体の外にあります。そのための計算幾何学アルゴリズムがあると確信しています。
これは、D. Eberlyの「Game Physics、Second Edition」という書籍でカバーされています。 chapter 2.5.5とサンプルコードはオンラインで入手できます。 (ちょうどそれを見つけたが、まだ試していない)
また、多面体は数式のために凸である必要はないことに注意してください。ちょうどsimpleでなければなりません。
- 1. 複数形の剛体の慣性を計算する
- 2. 多面体体積を計算する一般式
- 3. クリックスクロール量はどのようにしてwinformsスクロールバーで計算されますか?
- 4. 計算量の多いプログラムのパフォーマンステスト
- 5. xgboostの品質はどのように計算されますか?
- 6. オブジェクトが使用するRAMの量はどのようにして計算できますか?
- 7. 合計はどのように計算できますか? dataGridView列の値のうちどれですか?
- 8. アプリケーションフットプリントとはどのように計算するのですか?
- 9. JavaとJacksonライブラリを使用してJson Stringをどのように多面体逆シリアル化できますか?
- 10. どのようにアンドロイド画面を計算する?
- 11. どのように計算することができますか
- 12. PHP:円の体積、直径、面積を計算するには?
- 13. 行列を転置する計算量と逆算する計算量
- 14. scikit-learnで慣性を使ってギャップ統計の標準偏差をどのように計算しますか?
- 15. 最適な列幅はどのように計算できますか?
- 16. どのようにして最適なパラメータを開始ステップストップコード体系に計算できますか?
- 17. 計算量の多いC#プログラムの利点はありませんか?
- 18. 実行時に画面の高さと幅を計算するにはどうすればよいですか?
- 19. 面積計算と
- 20. 断面からの体積を計算する
- 21. 私の計算機プロジェクトでどのようにオペランドと演算子を解析できますか?
- 22. Luceneはマルチフィールドスコアをどのように計算しますか?
- 23. サロゲートペアはどのように計算されますか?
- 24. emはどのように計算されますか?
- 25. 階乗はどのように計算されますか?
- 26. UIScrollView - showsHorizontalScrollIndicatorはどのように計算されますか?
- 27. gitハッシュはどのように計算されますか?
- 28. 内部結合後の属性の合計を計算するにはどうすればよいですか?
- 29. Railsの質量アサイン保護属性はできません
- 30. JSPで日時計算をどのように実装できますか?
ニース。私はこれを見たはずです。ポイントがシェイプの内部か外部かを知ることは、古い "counts the crossings"アプローチの拡張です。 – dmckee