应用德劳内三角测量后,是否有可能找到形成的每个三角形的面积?matlab 中有什么函数可以做到这一点吗?请澄清我。提前感谢
我面临着同样的疑问,但幸运的是,我能够破解它,试试这个:
tri = delaunay(x,y);
areas = polyarea(x(tri'),y(tri'),2);
这将为您提供形成的每个三角形的区域。
如果您发现任何困难,请告诉我。
附言:tri'
表示矩阵的转置。
这可以通过多面积来完成 - 请注意使用dim
选项。
tri = delaunay(x,y);
areas = polyarea(tri(x),tri(y),2);
此解决方案有效,但未矢量化。
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
就我而言,这里的答案接近真实,但不完全正确,所以我在讨论中为未来可能需要它的人发声。
尝试此处给出的解决方案时,出现以下错误:
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);
这解决了我的问题,同时仍然是矢量化操作。