Функция MATLAB для расчета площади многоугольника с использованием суммы площадей треугольника
У меня есть вопрос относительно функции 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
1 ответ
Итак, для любых заинтересованных сторон или кого-либо еще, кто может решить проблему, подобную моей, у меня есть окончательный РАБОЧИЙ код, написанный ниже. Эта функция может выполнять двойную функцию. Если входные векторы координат находятся в 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