Все оказалось гораздо проще, есть алгоритм нахождения площади со знаком произвольного многоугольника.
Пусть многоугольник задан последовательностью вершин в форме массива координат вершин: Mas: array of TPoint;
Пусть, также, координаты начало и конца ломанной совпадают. Тогда
- Код: Выделить всё
Result := Result + (Mass[i+1].Y + Mass[i].Y)/2*(Mass[i+1].X-Mass[i].X)
Вычисленная по приведенной формуле площадь будет иметь знак плюс при обходе фигуры по часовой стрелке и знак минус при обходе против часовой стрелки, тогда как обычно полагают наоборот. Что бы совпасть с таким общепринятым определением, достаточно поставить знак минус перед суммой в приведенной формуле.
В итоге получается вот такая функция:
- Код: Выделить всё
//вычисление площади со знаком для произвольного многоугольника
function Square(Mass: TFigureMass): Real;
var
i: Integer;
begin
SetLength(Mass, Length(Mass)+1);
Mass[High(Mass)] := Mass[0]; //начало и конец массива совпадают
Result:=0;
for i := 0 to Length(Mass) - 2 do
Result := Result + (Mass[i+1].Y + Mass[i].Y)/2*(Mass[i+1].X-Mass[i].X)
end;