1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Function IsLeft(p1,p2,newp : TPoint) : real;
// Teste si point newp est : à Gauche|Sur| à Droite de la droite (p1p2).
// Result: >0 si newp est à gauche de la droite P1-P2
// =0 si le point est surla droite
// <0 ... droite
// NB : surface du triangle = Isleft / 2 .
begin // chaque point défini par ses coordonnées X,Y ...
result := (p2.X - p1.X) * (newp.Y - p1.Y)
- (newp.X - p1.X) * (p2.Y - p1.Y)
end;
Function IsInsideTriangle(A,B,C,H : TPoint) : boolean;
// Teste si point H est intérieur au Triangle ABC.
// Méthode: Test si H et C sont a gauche de AB, ou pas, mais en meme temps
begin
result := false;
if (IsLeft(C,A,H)*IsLeft(C,A,B)>0 and IsLeft(A,B,H)*IsLeft(A,B,C)>0 and IsLeft(C,B,H)*IsLeft(C,B,A)>0) then result := true;
end; |
Partager