サーフェスが三角形で構成された3Dメッシュオブジェクトの体積を計算したいとします。表面が三角形で構成された3Dメッシュオブジェクトの体積を計算する方法
答えて
GNU Triangulated Surface Librarycan do this for you。サーフェスは閉じなければならないことに注意してください。かなりの3Dモデルではそうはならないでしょう。
自分で実装したい場合は、まずコードを確認します。
これを再実装する場合は、GTSライブラリがLGPLであることに注意してください。したがって、派生的な作業はLGPLまたはGPLでなければなりません。 – Cascabel
私が正しく理解していれば、三角形のサーフェスメッシュが既にあり、3Dソリッドメッシュを生成したいとお考えです。
三角形は、3D内部に四面体要素を使用する必要があることを意味します。サーフェスメッシュをシードとして使用できるoctree auto meshing algorithmを検索する必要があります。
これは、有限要素オートメッシング文献の一般的な問題です。私はそこを見るだろう。
Reading this paper実際には非常に簡単な計算です。
トリックは四角形の符号付きボリュームを計算することです - あなたの三角形に基づいて、原点を上に置いてください。音量の記号は、三角形が原点の方向を指しているかどうかによって決まります。 (三角形の法線は、それ自体、あなたはそれが明示的に以下に参照が表示されない理由は、あなたの頂点の順序に依存する。)
は、このすべては、次の簡単な関数に沸く:
public float SignedVolumeOfTriangle(Vector p1, Vector p2, Vector p3) {
var v321 = p3.X*p2.Y*p1.Z;
var v231 = p2.X*p3.Y*p1.Z;
var v312 = p3.X*p1.Y*p2.Z;
var v132 = p1.X*p3.Y*p2.Z;
var v213 = p2.X*p1.Y*p3.Z;
var v123 = p1.X*p2.Y*p3.Z;
return (1.0f/6.0f)*(-v321 + v231 + v312 - v132 - v213 + v123);
}
その後、メッシュの体積を計算するためにドライバ:
public float VolumeOfMesh(Mesh mesh) {
var vols = from t in mesh.Triangles
select SignedVolumeOfTriangle(t.P1, t.P2, t.P3);
return Math.Abs(vols.Sum());
}
きわめて洗練されたソリューションです。 – levis501
2001年以前にこれが発見されなかったのはなぜだろうか?それはありましたが、関連性はありませんでしたか? –
Oct 1984、論文「任意の非凸多面体の積分特性を計算するための記号的方法」という論文が出版され、この方法を説明して体積を計算する。 それは多かれ少なかれ些細な方法でもありますので、この情報だけではなく、紙を公開するだけです。 –
イップ・フランクKruegersの答えは、そのためにも+1を動作します。ベクタ関数を利用できる場合は、これも使用できます。
public static float SignedVolumeOfTriangle(Vector p1, Vector p2, Vector p3)
{
return p1.Dot(p2.Cross(p3))/6.0f;
}
編集が追加されました。もしあなたが不明ならDot()とCross()のために。ほとんどの数学ライブラリにはこれらがあります。 WPFを使用している場合は、Vector3Dクラスの静的メソッドとして実装されます。
public class Vector
{
...
public float Dot(Vector a)
{
return this.X * a.X + this.Y * a.Y + this.Z * a.Z;
}
public Vector Cross(Vector a)
{
return new Vector(
this.Y * a.Z - this.Z * a.Y,
this.Z * a.X - this.X * a.Z,
this.X * a.Y - this.Y * a.X
);
}
...
}
おそらくDot()とCross()のポストコードか? (実装するのは簡単ですが、完全性のために)。ところで、@フランククルーガーズの答えはあなたがp1.Dot(p2.Cross(p3))/ 6.0f –
上記の方法は球体四面体のような「単純な」オブジェクト(交差する/重なり合う三角形がない)に適しています。複雑な形状の場合は、メッシュを分割して(閉じて)、各セグメントのボリュームを別々に計算することをお勧めします。 これが役立つことを願っています。
- 1. HTMLで三角形の面積を計算する方法
- 2. 三角形の境界線と面積計算器
- 3. 誰でも、三角形の面積/周囲/高さを計算する方法を知っていますか?
- 4. 表面積計算
- 5. 三角形の面積を計算する際にエラーが発生しましたか?
- 6. 動的3Dメッシュの三角形データを生成する方法
- 7. 四角形と三角形のメッシュを三角形だけで構成されたメッシュに変換します
- 8. 離散データで定義された表面下の体積を計算する方法は?
- 9. 3Dメッシュで接続された三角形を見つける方法
- 10. 計算表面積は
- 11. PHP:円の体積、直径、面積を計算するには?
- 12. 形状の配列の累積面積を計算する
- 13. Matlab多面体の三角形補間面を補間する
- 14. 画像から生成された三角形の三角形をつくる
- 15. 多面体体積を計算する一般式
- 16. ハーフ3Dメッシュオブジェクトをミラーリングする方法は?
- 17. 円柱の面積と体積を計算するためのJavaランタイムエラー
- 18. 法線を計算して三角形メッシュに適用する
- 19. 辺の長さを持つ正四面体の体積を計算する
- 20. 3D三角形内の線形補間
- 21. MATLABでの面積計算
- 22. ピクセルの積分画像(積算面積テーブル)を計算する
- 23. 面積計算と
- 24. 3DでのDelaunay三角形分割
- 25. Abaqusスクリプト測定/表面積の計算
- 26. SVG - 三角形の内側の角度方向を計算する
- 27. 三角形を生成するネストされたループ、間違った方法
- 28. 断面からの体積を計算する
- 29. MATLABプロット上の形状の面積を計算する
- 30. 2次元形状の面積を計算する
私は他の人の情報を提供する時間がありませんが、見てみましょう:http://amp.ece.cmu.edu/Publication/Cha/icip01_Cha.pdf – nlucaroni
質問1410525と重複して表示されます – DarenW