【问题标题】:MATLAB function for calculating the area of polygon using sum of triangle areas使用三角形面积之和计算多边形面积的 MATLAB 函数
【发布时间】:2017-07-09 19:41:49
【问题描述】:

我有一个关于我编写的 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

【问题讨论】:

  • 您可能正在寻找polyarea
  • 我希望是这样,不幸的是我必须编写一个函数来计算基于内部三角形的多边形面积。我已经看到了几种更有效的方法来做到这一点,但我的任务说我必须使用这种方法。
  • 你能澄清你当前代码的问题吗?
  • 我的问题在于 else 语句。给定任意数量的 x 和 y 坐标,我想计算多边形内三角形的面积。我认为我的公式是正确的。我相信问题出在循环索引的某个地方。我不确定将索引设置为什么,以便我可以捕获用于区域计算的点。
  • 您可以考虑自己创建一个答案(并在几天后接受)

标签: matlab function defined


【解决方案1】:

好的,所以对于任何感兴趣的各方或任何其他可能正在解决像我这样的问题的人,我在下面编写了最终的 WORKING 代码。这个函数可以做双重任务。如果坐标向量输入为 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 2011-01-09
    • 2013-11-13
    • 2023-03-24
    • 1970-01-01
    • 2017-11-21
    • 2010-10-07
    • 2013-10-24
    相关资源
    最近更新 更多