проверка прин точки треуг методом относительности положения function I

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
// проверка прин. точки треуг. методом относительности положения
function IsPointIn_Relat(aAx, aAy, aBx, aBy, aCx, aCy, aPx, aPy: single): boolean;
// funcs
function Q(ax, ay, bx, by, atx, aty: single): single;
begin
Result := atx * (by - ay) + aty * (ax - bx) + ay * bx - ax * by;
end;
var
q1, q2, q3 : single;
begin
// выбираем определённую ориентацию по вершинам(чтоб было по порядку)
// универсальный
q1 := Q(aAx, aAy, aBx, aBy, aPx, aPy);
q2 := Q(aBx, aBy, aCx, aCy, aPx, aPy);
q3 := Q(aCx, aCy, aAx, aAy, aPx, aPy);
Result := ((q1 >= 0) and (q2 >= 0) and (q3 >= 0)) or
((q1 < 0) and (q2 < 0) and (q3 < 0));
end;