# volume calculation from the DelaunayTri(x,y,z) function

조회 수: 39 (최근 30일)
Nikola Soukupová 2024년 4월 21일
댓글: Matt J 2024년 4월 22일
I have the data in X,Y,Z format.
Then I entered a function into script:
rng default;
DT=DelaunayTri(x,y,z)
tetramesh(DT,'FaceAlpha',0.3)
The question is, how do I calculate the volume from this Delaunay Triangulation?

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

### 채택된 답변

John D'Errico 2024년 4월 21일
편집: John D'Errico 2024년 4월 21일
Its not THAT hard. You compute the volume of each simplex in the tessellation. Sum the absolute values up. (Since those simplexes may have random signs.)
As an example, I'll create a set of simplexes that lie in a rectangular box, of edge lengths [1 2 4]. So the volume would be just a little less than 8.
xyz = rand(10000,3).*[1 2 4];
Tess = delaunayTriangulation(xyz)
Tess =
delaunayTriangulation with properties: Points: [10000x3 double] ConnectivityList: [66176x4 double] Constraints: []
Now, to write a little code, probably something I should have posted online before. I've attached the DTvolume code to this response.
V = DTvolume(Tess)
V = 7.9009
The code I wrote does a little extra, to avoid numerical problems to whatever extent possible. And of course, it is fully vectorized, and even works for 2-d triangulations.

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

### 추가 답변 (1개)

Walter Roberson 2024년 4월 21일
DT = DelaunayTri(x,y,z);
[~, Volume] = convexhull(DT);
##### 댓글 수: 1이전 댓글 -1개 표시이전 댓글 -1개 숨기기
Matt J 2024년 4월 22일
That would work, but only for convex regions.

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

### Community Treasure Hunt

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

Start Hunting!

Translated by