xyz座標のベクトルデータ(散布データ)から3次元メッシュプロットや表面積の出し方
30 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Excelやテキストファイルにx, y,z のデータがそれぞれベクトルデータ(散布データ)として定義されています。
このデータを使用して3次元メッシュプロットを描き表面積のを求める方法を教えてください。
2 commentaires
源樹 上林
le 15 Oct 2021
convexHull なんて便利なのがあったのか。例題はyのデータがゼロだから polyarea で面積出せそうですね。
もしyにも凹凸がある場合は、面積計算は cross を利用できます。外積の半分で三角形の面積になるので delaunay で作った三角形の面積を全部足し合わせれば表面積が出ます。
Réponses (2)
Kenta
le 27 Déc 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 commentaires
Atsushi Ueno
le 16 Oct 2021
Modifié(e) : Atsushi Ueno
le 17 Oct 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 commentaires
Voir également
Catégories
En savoir plus sur 表面プロットとメッシュ プロット dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!