
|
FUNCTION PointInTriangle(x,y,x1,y1,x2,y2,x3,y3) // Date création : 19 09 2002 // Auteur : Nicolas REY // Site : scalion.free.fr // x,y sont les coordonnées du point // x1,y1,x2,y2,x3,y3 sont les coordonnées du triangle // La fonction renvoie TRUE (-1) si le point est dans le triangle // sinon renvoie FALSE (0) LOCAL Inter_X,RAPPORT,vx1,vx2,r% IF y1 > y2 ' Trier les sommets en fonction de leurs coordonnêe Y SWAP x1,x2 SWAP y1,y2 ENDIF IF y1 > y3 SWAP x1,x3 SWAP y1,y3 ENDIF IF y2 > y3 SWAP x2,x3 SWAP y2,y3 ENDIF Inter_X = x1 ' Inter_X est le point D dans le segment AC IF y1 <> y2 THEN Inter_X = Inter_X + (x3 - x1) / ( (y3 - y1) / (y2 - y1) ) IF y < y1 OR y > y3 ' Si le point est au dessus ou en dessous du triangle r% = FALSE ELSE IF y > y2 ' Si le point est peut être dans le triangle infêrieur... RAPPORT = (y3 - y2) / (y - y2) vx1 = Inter_X + (x3 - Inter_X) / RAPPORT vx2 = x2 + (x3 - x2) / RAPPORT IF vx2 < vx1 THEN SWAP vx1,vx2 IF x >= vx1 IF x <= vx2 THEN r% = TRUE ENDIF ELSE IF y > y1 ' ...ou dans le triangle supêrieur... RAPPORT = (y2 - y1) / (y - y1) vx1 = x1 + (Inter_X - x1) / RAPPORT vx2 = x1 + (x2 - x1) / RAPPORT IF vx2 < vx1 THEN SWAP vx1,vx2 IF x >= vx1 IF x <= vx2 THEN r% = TRUE ENDIF ELSE IF y = y2 '... voir entre les deux ! IF Inter_X > x2 THEN SWAP x2,Inter_X IF x >= x2 IF x <= Inter_X THEN r% = TRUE ENDIF ENDIF ENDIF RETURN r% ENDFUNC |