Функция 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
Другие вопросы по тегам