Реферат: Вычисления площади произвольного многоугольника
1) Запишем уравнения прямой, проходящей через точки A1 и A2.
Преобразуем его в форму вида:
где , ,
Из геометрии известно, что если две точки находятся по одну сторону от прямой, то при подстановке их координат в полином левой части получим значения одного знака. Таким образом, если точки B1 и B2 располагаются по разные стороны от прямой, то
(AX1B +BY1B +C)(AX2B +BY2B +C)<0
Но пересечение прямых не является достаточным для пересечения отрезков, например:
Эти отрезки не пересекаются.
Для достаточного доказательства пересечения отрезков необходимо произвести все вышеприведенные операции над точками B1 и B2 , т.е. провести через них прямую и выяснить расположение точек A1 и A2 относительно ее.
Таким образом определяем возможность отсечения вершины многоугольника с количеством вершин, больше четырех.
Для некоторых видов четырехугольника это условие не несправедливо, например:
Здесь вершину A отсечь нельзя. Для четырехугольника определяем расположение отсекаемой вершины и вершины, несмежной с ней (через оставшиеся проходит "линия отреза"). Если они расположены по одну сторону, как на рисунке, то отсекать нельзя. Приведенный алгоритм контроля реализуем в следующей функции:
function cross(c: integer): boolean;
var a, b, i: integer;
AA, BB, CC,
AA1, BB1, CC1: real;
function Mline(x,y: real): real;
begin
Mline:=AA*x+BB*y+CC
end;
function Sline(x,y: real): real;
begin
Sline:=AA1*x+BB1*y+CC1
end;
begin
if c=1 then
begin
a:=n;
b:=2;
end