| Код |
|---|
var
s1,s2,s3:integer;
function Side(pX1, pY1, pX2, pY2: Integer): Integer;
begin
Result:=(pY2-pY1)*(X0-pX1)-(pX2-pX1)*(Y0-pY1);
if Result > 0 then
Result:=1
else
if Result < 0 then
Result:=-1
else
if not (((X0-pX1) xor (X0-pX2) < 0) or ((Y0-pY1) xor (Y0-pY2) < 0)) then
Result:=2; //точка на продолжении отрезка -> вне треугольника
//else Result:=0 //точка на отрезке
end;
begin
s1:=Side(X1,Y1,X2,Y2);
s2:=Side(X2,Y2,X3,Y3);
s3:=Side(X3,Y3,X1,Y1);
Result:=(s1 and s2 and s3 <= 0) or (s1 or s2 or s3 = 1);
end; |
здесь для трех вершин, знак возвращаемый функцией Side должен совпадать для всех точек
для любого количества точек подойдет