xyz座標のベクトルデータ(散布データ)から3次元メッシュプロットや表面積の出し方
조회 수: 16 (최근 30일)
이전 댓글 표시
Excelやテキストファイルにx, y,z のデータがそれぞれベクトルデータ(散布データ)として定義されています。
このデータを使用して3次元メッシュプロットを描き表面積のを求める方法を教えてください。
댓글 수: 2
源樹 上林
2021년 10월 15일
convexHull なんて便利なのがあったのか。例題はyのデータがゼロだから polyarea で面積出せそうですね。
もしyにも凹凸がある場合は、面積計算は cross を利用できます。外積の半分で三角形の面積になるので delaunay で作った三角形の面積を全部足し合わせれば表面積が出ます。
답변 (2개)
Kenta
2020년 12월 27일
clear;clc;close all
ptCloud = pcread('teapot.ply');
pcshow(ptCloud);
ptCloud=pcdownsample(ptCloud,"random",0.1);
P=double(ptCloud.Location);
% k = boundary(P);
% trisurf(k,P(:,1),P(:,2),P(:,3),'Facecolor','red','FaceAlpha',0.1)
DT = delaunayTriangulation(P(:,1),P(:,2),P(:,3));
tetramesh(DT,'FaceAlpha',0.3);
[K,v] = convexHull(DT);
trisurf(K,DT.Points(:,1),DT.Points(:,2),DT.Points(:,3))
こんにちは、源樹 上林さまのおっしゃるように、delauney三角形を作成すれば、それらしいものはできます。
試したことはないのですが、以下のようなツールもあるようです。いろいろと試してみていい感じのメッシュができたら面積計算を試みてはどうでしょうか
http://iso2mesh.sourceforge.net/cgi-bin/index.cgi?Doc/Installation
댓글 수: 0
Atsushi Ueno
2021년 10월 16일
편집: Atsushi Ueno
2021년 10월 17일
回答に際し今知った関数を使ってみたのですが、理解が浅いためか使い勝手が悪いです。
- アルファ形状の作成時に指定する「アルファ半径」が謎
- 何故か面積の値が倍になります。表と裏があるって事でしょうか (追記)見た目から明らかに「アルファ形状」は三角メッシュです。三角形1個を構成する2辺の外積を求めているのであれば、2で割って三角形の面積にしなければならないという事なのでしょうか?surfaceAreaの仕様がよくわかりません
Excelやテキストファイルに定義されたベクトルデータ(散布データ)はこういう事ですよね
n = 10; % xyz:ベクトルデータ(散布データ)の例を作成
xyz(:, 1) = repmat((0:n)', [n+1 1]);
xyz(:, 2) = repelem((0:n)', n+1);
xyz(:, 3) = rand((n+1)^2, 1);
plot(xyz) % xyz:ベクトルデータ(散布データ)の例
shp = alphaShape(xyz, 1.9); % アルファ形状を作成
totalsurfarea = surfaceArea(shp) % アルファ形状の表面積を計算
plot(shp);
xyz(:, 3) = rand((n+1)^2, 1).* eps; % xyz:ベクトルデータ(散布データ)をまっすぐに伸ばす
shp = alphaShape(xyz, 1.0); % アルファ形状を作成
totalsurfarea = surfaceArea(shp) % アルファ形状の表面積を計算
plot(shp);
댓글 수: 0
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!