matlab Delaunay三角网中合成三角形面积的求法

plupiseo  于 2023-08-06  发布在  Matlab
关注(0)|答案(4)|浏览(140)

应用Delaunay三角剖分后,是否有可能找到形成的每个三角形的面积?matlab中有什么函数可以做到吗?请澄清我。提前感谢

ws51t4hk

ws51t4hk1#

我也面临着同样的疑问,但谢天谢地,我能够破解它,试试这个:

tri = delaunay(x,y);
areas = polyarea(x(tri'),y(tri'),2);

字符串
这将给予你每个三角形的面积。
如果你发现什么困难,一定要告诉我。
注:tri'表示矩阵的转置。

rjzwgtxy

rjzwgtxy2#

这可以通过polyarea来完成-注意dim选项的使用。

tri = delaunay(x,y);
areas = polyarea(tri(x),tri(y),2);

字符串

6gpjuf90

6gpjuf903#

此解决方案有效,但未矢量化。

DT = delaunayTriangulation(X,Y);

NTriangles = size(DT.ConnectivityList,1);

% Triangles' Area Calculation (Try to vectorize)
Areas = zeros(NTriangles,1);
for i = 1:NTriangles
    PointIndexes = DT.ConnectivityList(i,:);
    Areas(i) = polyarea(DT.Points(PointIndexes,1),DT.Points(PointIndexes,2));
end

字符串

kx5bkwkv

kx5bkwkv4#

在我的案例中,这里的答案接近真实,但不完全是,所以我把我的声音加入到讨论中,以供未来可能需要它的人使用。
在尝试这里给出的解决方案时,我得到了以下错误:

Error using reshape
Number of elements must not change. Use [] as one of the size inputs to
automatically calculate the appropriate size for that dimension.

Error in polyarea (line 46)
  area = reshape(abs(sum( (x([2:siz(1) 1],:) - x(:,:)).* ...

字符串
问题是x(tri')给出了一个向量,而不是一个矩阵。相反,我做了以下事情:

pt = tri.Points;
conn = tri.ConnectivityList;
xmat = reshape(pt(conn,1), [], 2);
ymat = reshape(pt(conn,2), [], 2);
Avec = polyarea(xmat, ymat, 2);


这解决了我的问题,同时仍然是一个矢量化的操作。

相关问题