Главная
Дисциплины (2009-2010)
Дисциплины (2010-2011)
Разное
Популярные

Геометрические алгоритмы: с какой стороны вектора лежит точка? (Вариант 1):

{ геометрические алгоритмы: С какой стороны вектора лежит точка? Вариант 1 }
{ ------------------------------------------------------------------------ }
{ Идея: обходим треугольник по часовой стрелке.                            }
{       Точка должна лежать справа от всех сторон, если она внутри         }
{ ------------------------------------------------------------------------ }

{ функция определеяет положение точки относительно вектора }
Function WherePoint(ax, ay, bx, by, px, py: real): integer;
var s: real;
begin
    s := (bx - ax) * (py - ay) - (by - ay) * (px - ax);
    if s > 0 then WherePoint := 1
             else if s < 0 then WherePoint := -1
                           else WherePoint := 0;
end;

{ функция определеяет относительное положение точки: внутри или нет }
Function PointInsideTreangle(ax, ay, bx, by, cx, cy, px, py: real): boolean;
var s1, s2, s3: integer;
begin
    PointInsideTreangle := FALSE;
    s1 := WherePoint(ax, ay, bx, by, px, py);
    s2 := WherePoint(bx, by, cx, cy, px, py);
    if s2 * s1 <= 0 then EXIT;
    s3 := WherePoint(cx, cy, ax, ay, px, py);
    if s3 * s2 <= 0 then EXIT;
    PointInsideTreangle := TRUE;
end;

Begin {* Тело основной программы *}
   writeln(PointInsideTreangle(1, 1, 8, 1, 1, 8, 2, 2));
   writeln(PointInsideTreangle(1, 1, 8, 1, 1, 8, 6, 6));
End.


Последнее обновление:
Copyright (C) 2009-2010 by RA0LHS
Hosted by uCoz