xyz座標のベクトル​​データ(散布データ​)​から3次元メッシ​ュプ​ロットや表面積​の出し方

조회 수: 16 (최근 30일)
和大 坂田
和大 坂田 2020년 12월 20일
편집: Atsushi Ueno 2021년 10월 17일
Excelやテキストファイルにx, y,z のデータがそれぞれベクトルデータ(散布データ)として定義されています。
このデータを使用して3次元メッシュプロットを描き表面積のを求める方法を教えてください。
  댓글 수: 2
源樹 上林
源樹 上林 2020년 12월 22일
delaunay と polyarea あたりで、がんばればできる…ような気がする。
源樹 上林
源樹 上林 2021년 10월 15일
convexHull なんて便利なのがあったのか。例題はyのデータがゼロだから polyarea で面積出せそうですね。
もしyにも凹凸がある場合は、面積計算は cross を利用できます。外積の半分で三角形の面積になるので delaunay で作った三角形の面積を全部足し合わせれば表面積が出ます。

댓글을 달려면 로그인하십시오.

답변 (2개)

Kenta
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

Atsushi Ueno
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) % アルファ形状の表面積を計算
totalsurfarea = 221.9298
plot(shp);
xyz(:, 3) = rand((n+1)^2, 1).* eps; % xyz:ベクトルデータ(散布データ)をまっすぐに伸ばす
shp = alphaShape(xyz, 1.0); % アルファ形状を作成
totalsurfarea = surfaceArea(shp) % アルファ形状の表面積を計算
totalsurfarea = 200
plot(shp);

카테고리

Help CenterFile Exchange에서 Delaunay 三角形分割에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!