【发布时间】: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 坐标,我想计算多边形内三角形的面积。我认为我的公式是正确的。我相信问题出在循环索引的某个地方。我不确定将索引设置为什么,以便我可以捕获用于区域计算的点。
-
您可以考虑自己创建一个答案(并在几天后接受)