xyz座標のベクトルデータ(散布データ)から3次元メッシュプロットや表面積の出し方
8 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Excelやテキストファイルにx, y,z のデータがそれぞれベクトルデータ(散布データ)として定義されています。

このデータを使用して3次元メッシュプロットを描き表面積のを求める方法を教えてください。
2 Kommentare
源樹 上林
am 15 Okt. 2021
convexHull なんて便利なのがあったのか。例題はyのデータがゼロだから polyarea で面積出せそうですね。
もしyにも凹凸がある場合は、面積計算は cross を利用できます。外積の半分で三角形の面積になるので delaunay で作った三角形の面積を全部足し合わせれば表面積が出ます。
Antworten (2)
Kenta
am 27 Dez. 2020
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 Kommentare
Atsushi Ueno
am 16 Okt. 2021
Bearbeitet: Atsushi Ueno
am 17 Okt. 2021
回答に際し今知った関数を使ってみたのですが、理解が浅いためか使い勝手が悪いです。
- アルファ形状の作成時に指定する「アルファ半径」が謎
- 何故か面積の値が倍になります。表と裏があるって事でしょうか (追記)見た目から明らかに「アルファ形状」は三角メッシュです。三角形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 Kommentare
Siehe auch
Kategorien
Mehr zu Delaunay 三角形分割 finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!