Un petit exemple complet est disponible dans le fichier zip.
Si vous êtes amateur de maths et que vous voulez comprendre le principe de ce code, lisez ce qui suit, sinon utilisez cette fonction les yeux fermés ! Pour savoir si un point est dans le triangle, on procède à un changement de base : la nouvelle base est formée par un des sommets du triangle (->l'origine) et les 2 côtés correspondants (->Ox et Oy). On transforme les coordonnées du point dans cette nouvelle base et on regarde que les composantes soient >0 et <1.
Source / Exemple :
' On considère un triangle formé par les 3
' sommets (X,Y) -> X(0 to 2) et Y(0 to 2) as double
' On appelle la fonction Interieur(pX,pY) pour
' savoir si le point (pX,pY) se trouve à
' l'intérieur du triangle.
private function Interieur( _
byval pX as double, byval pY as double) _
as boolean
dim Det as double
dim Temp as double
dim M(0 to 1, 0 to 1) as double
M(0,0)=X(1)-X(0)
M(1,0)=Y(1)-Y(0)
M(0,1)=X(2)-X(0)
M(1,1)=Y(2)-Y(0)
Det=M(0,0)*M(1,1)-M(1,0)*M(0,1)
' Vérifie que le triangle en est un !
if Det = 0 then
Interieur = false
exit function
else
' Changement de base
pX = pX - X(0)
pY = pY - Y(0)
Temp = (pX*M(1,1)-pY*M(0,1))/Det
pY = (-pX*M(1,0)+pY*M(0,0))/Det
pX = Temp
if pX>0 and pY>0 and pX+pY<1 then
Interieur = true
else
Interieur = false
end if
end if
end function
Conclusion :
A partir de cette méthode, on peut regarder si un point se trouve à l'intérieur d'un parallèlogramme (changer la condition "if pX>0 and pY>0 and pX+pY<1" en "if pX>0 and pX<1 and pY>0 and pY<1"), et, en passant en 3D, on peut savoir si un point se trouve dans une pyramide, ...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.