使用三角形面积之和计算多边形面积的 MATLAB 函数
MATLAB function for calculating the area of polygon using sum of triangle areas
我对我编写的 MATLAB 函数有疑问。它以两个行向量的形式将一组 x 和 y 顶点坐标作为输入,并使用它们来计算多边形的面积。
对于单个三角形的情况,它运行良好(尽管我知道我的代码可以变得更高效并且看起来更好)。但是,我将在脚本中使用此函数,该脚本采用一组 x 和 y 点并计算由坐标点界定的多边形的周长和面积。
使用我为三角形面积创建的函数,可以根据以下步骤计算多边形的面积:
- 有 N - 2 个三角形(其中 N 是多边形的边数)
- 我的函数计算这些三角形的面积
(使用A = 0.5(x1*(y2-y3)-x2*(y1-y3)+x3(y1-y2)
)
- 将三角形面积相加求出多边形的面积。
我的代码写在下面。我的周长函数运行良好,但我不确定如何将三角形的面积函数实现到多边形面积程序中。 我相信我的公式是正确的,问题出在循环索引的某个地方。
任何关于如何从我下面的内容中进行的建议都将不胜感激!
function [tri_area] = area2dd(coords_x,coords_y)
%%Input argument check
narginchk(2,2) ;
%%Calculation
% % ii = 1:length(coords_x)-2;
% % jj = 1:length(coords_y)-2;
if length(coords_x) == 3
ii = 1:length(coords_x) -2;
jj = 1:length(coords_y) -2;
tri_area = sum(abs(0.5.*(coords_x(ii).*(coords_y(jj+1)-21coords_y(jj+2))-coords_x(ii+1)...
.*(coords_y(jj)-coords_y(jj+2))+coords_x(ii+2).*(coords_y(jj)-23coords_y(jj+1)))))
else
ii = 1:3:length(coords_x) -2;
jj = 1:3:length(coords_y) -2;
tri_area = sum(abs(0.5.*(coords_x(ii).*(coords_y(jj+1)-29coords_y(jj+2))-coords_x(ii+1)...
.*(coords_y(jj)-coords_y(jj+2))+coords_x(ii+2).*(coords_y(jj)-31coords_y(jj+1)))))
end
好的,所以对于任何感兴趣的人或可能正在解决像我这样的问题的任何其他人,我在下面编写了最终的工作代码。这个函数可以做双重任务。如果输入的坐标向量是 3 对,则该函数将计算三角形的面积。如果有超过 3 组坐标对,那么它将计算由这些坐标界定的多边形的面积。
narginchk(2,2) ;
if length(coords_x) == 3
ii = 1
jj = 1
area = sum(abs(0.5.*(coords_x(ii).*(coords_y(jj+1)-coords_y(jj+2))- ...
coords_x(ii+1).*(coords_y(jj)-coords_y(jj+2))+coords_x(ii+2).*...
(coords_y(jj)-coords_y(jj+1))))) ;
else
ii = 1:length(coords_x) -3 ;
jj = 1:length(coords_y) -3 ;
area = sum((abs(0.5.*(coords_x(1).*(coords_y(jj+1)-coords_y(jj+2)) ...
-coords_x(ii+1)...
.*(coords_y(1)-coords_y(jj+2))+coords_x(ii+2).*(coords_y(1)- ...
coords_y(jj+1)))))) ;
end
end
我对我编写的 MATLAB 函数有疑问。它以两个行向量的形式将一组 x 和 y 顶点坐标作为输入,并使用它们来计算多边形的面积。
对于单个三角形的情况,它运行良好(尽管我知道我的代码可以变得更高效并且看起来更好)。但是,我将在脚本中使用此函数,该脚本采用一组 x 和 y 点并计算由坐标点界定的多边形的周长和面积。
使用我为三角形面积创建的函数,可以根据以下步骤计算多边形的面积:
- 有 N - 2 个三角形(其中 N 是多边形的边数)
- 我的函数计算这些三角形的面积
(使用A = 0.5(x1*(y2-y3)-x2*(y1-y3)+x3(y1-y2)
) - 将三角形面积相加求出多边形的面积。
我的代码写在下面。我的周长函数运行良好,但我不确定如何将三角形的面积函数实现到多边形面积程序中。 我相信我的公式是正确的,问题出在循环索引的某个地方。
任何关于如何从我下面的内容中进行的建议都将不胜感激!
function [tri_area] = area2dd(coords_x,coords_y)
%%Input argument check
narginchk(2,2) ;
%%Calculation
% % ii = 1:length(coords_x)-2;
% % jj = 1:length(coords_y)-2;
if length(coords_x) == 3
ii = 1:length(coords_x) -2;
jj = 1:length(coords_y) -2;
tri_area = sum(abs(0.5.*(coords_x(ii).*(coords_y(jj+1)-21coords_y(jj+2))-coords_x(ii+1)...
.*(coords_y(jj)-coords_y(jj+2))+coords_x(ii+2).*(coords_y(jj)-23coords_y(jj+1)))))
else
ii = 1:3:length(coords_x) -2;
jj = 1:3:length(coords_y) -2;
tri_area = sum(abs(0.5.*(coords_x(ii).*(coords_y(jj+1)-29coords_y(jj+2))-coords_x(ii+1)...
.*(coords_y(jj)-coords_y(jj+2))+coords_x(ii+2).*(coords_y(jj)-31coords_y(jj+1)))))
end
好的,所以对于任何感兴趣的人或可能正在解决像我这样的问题的任何其他人,我在下面编写了最终的工作代码。这个函数可以做双重任务。如果输入的坐标向量是 3 对,则该函数将计算三角形的面积。如果有超过 3 组坐标对,那么它将计算由这些坐标界定的多边形的面积。
narginchk(2,2) ;
if length(coords_x) == 3
ii = 1
jj = 1
area = sum(abs(0.5.*(coords_x(ii).*(coords_y(jj+1)-coords_y(jj+2))- ...
coords_x(ii+1).*(coords_y(jj)-coords_y(jj+2))+coords_x(ii+2).*...
(coords_y(jj)-coords_y(jj+1))))) ;
else
ii = 1:length(coords_x) -3 ;
jj = 1:length(coords_y) -3 ;
area = sum((abs(0.5.*(coords_x(1).*(coords_y(jj+1)-coords_y(jj+2)) ...
-coords_x(ii+1)...
.*(coords_y(1)-coords_y(jj+2))+coords_x(ii+2).*(coords_y(1)- ...
coords_y(jj+1)))))) ;
end
end