Savoir si un point est dans un triangle

Contenu du snippet

Apres avoir réfléchi longtemp j'ai trouvé la formule, la voici

Source / Exemple :


'FONCTIONS ANNEXES

'longueur de l'hypoténuse d'un triangle rectangle
Function Distance(X1, Y1, X2, Y2)
Distance = Sqr(Abs(X1 - X2) ^ 2 + Abs(Y1 - Y2) ^ 2)
End Function

'cos -1
Public Function CosM(X) As Single
Pi = 3.14
For Ang = 0 To 2 * Pi Step Pi / 100
  Aprox1 = Cos(Ang - Pi / 100)
  Aprox2 = Cos(Ang + Pi / 100)
  If Aprox1 > Aprox2 Then
   temp = Aprox1
   Aprox1 = Aprox2
   Aprox2 = temp
  End If
  If X >= Aprox1 And X <= Aprox2 Then CosM = Ang * 57.29: Exit For
Next
End Function

'récupère la valeur de l'angle d'une droite
Function GetAngle(XOrigin, YOrigin, X2, Y2)
If XOrigin = X2 And YOrigin = Y2 Then GetAngle = 0: Exit Function
a = (X2 - XOrigin) / Distance(XOrigin, YOrigin, X2, Y2)
a = CosM(a)
If Y2 < YOrigin Then a = (180 - a) + 180
If Y2 = YOrigin And X2 < XOrigin Then a = a + 180
GetAngle = a
End Function

'FONCTION GENERALE'
'''''''''''''''''''
Function IsInTriangle(PointX, PointY, TriX1, TriY1, TriX2, TriY2, TriX3, TriY3) As Boolean
a1 = GetAngle(PointX, PointY, TriX1, TriY1)
a2 = GetAngle(PointX, PointY, TriX2, TriY2)
a1 = Abs(a1 - a2)
a2 = GetAngle(PointX, PointY, TriX1, TriY1)
a3 = GetAngle(PointX, PointY, TriX3, TriY3)
a2 = Abs(a2 - a3)
a3 = GetAngle(PointX, PointY, TriX2, TriY2)
a4 = GetAngle(PointX, PointY, TriX3, TriY3)
a3 = Abs(a3 - a4)
If a1 > 180 Then a1 = 360 - a1
If a2 > 180 Then a2 = 360 - a2
If a3 > 180 Then a3 = 360 - a3
If (a1 + a2 + a3) = 360 Then IsInTriangle = True Else IsInTriangle = False
End Function

Conclusion :


voila bonne prog

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.