2017-02-04 18 views
0

Matlabの石(集約)点群のサーフェス三角形分割を行う必要があります。このため私はデカルト座標系でx,y,zを持っています。Matlabの3Dオブジェクトの三角形化

簡単にするために、球形のオブジェクトから始めました。

DT = delaunayTriangulation(x,y,z); 
figure 
trisurf(DT.ConnectivityList,DT.Points(:,1),DT.Points(:,2),DT.Points(:,3), ... 
     'FaceColor','cyan','FaceAlpha', 0.8); 

は、コードを実行し、結果は次のとおりです。 Triangulation of Spherical Object

は、それはあまりにも球体の内側に三角形を作ります。 1つのポイントを別のポイントに接続します。

また、delaunayTriangulation()は理想化されたサーフェスの三角関数であり、敏感なサーフェスでは機能しません。石の表面を考えると、そこには不規則なものがたくさんあります。

次に、DelaunayTri()の機能を試しました。これは、球体オブジェクト、三角形のみのサーフェスで機能しました。しかし、より複雑な(石)形状を試したとき、その機能はちょうど形状を理想化し、石のすべての突起(不規則性)を考慮しなかった。

tri = DelaunayTri(x,y,z); 
[FBtri,FBpoints] = freeBoundary(tri); 

figure 
trisurf(FBtri,FBpoints(:,1),FBpoints(:,2),FBpoints(:,3), ... 
     'FaceColor','cyan','FaceAlpha', 0.8); 

上記のコードから除去freeBoundary()関数が、結果は同じである場合(理想的な)と三角測量は許容されないオブジェクト、内部に作ら。

最後に、delaunay()関数を使用しました。球体を正しく三角形化していないものもあります。

tri = delaunay(x,y,z); 
figure 
trisurf(tri,x,y,z,'FaceColor','cyan','FaceAlpha', 0.8); 

質問:どのような機能と方法(詳細を記入してください)で、どのような形の石の表面の詳細な3D三角形分割を行うことができますか?上記のコードで私の間違いは何でしたか?

答えて

1

あなたが試した純粋な方法のどれもあなたが望むことはできません - それらはすべて表面だけでなく入力の完全な凸包をテッセレーションします。

ポイントクラウドから一般サーフェスを再構築することは、単純な作業ではありません。私はそれが組み込みのMATLAB機能を使って直接実行できるとは思わない。

その他のオプション(CGALが提供するsurface-reconstructionツールなど)を調べることができます。