Savoir si un point (2d) est dans un triangle

Description

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, ...

Codes Sources

A voir également

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.