Savoir si un point est dans un triangle

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 347 fois - Téléchargée 65 fois

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

Ajouter un commentaire

Commentaires

Vb Lover
Messages postés
221
Date d'inscription
vendredi 30 novembre 2001
Statut
Membre
Dernière intervention
13 février 2010
3 -
C'est vraiment (mais alors vraiment) très moche ce code ... et c'est pas sûr qu'il fonctionne. Y'a des boucles dans tous les sens, dans calculs d'angle douteux, et des approximations en veux-tu en voilà ! ... bref, il fait peur, ce code !
C'est pour ça que j'ai fait un autre algorithme "Savoir si un point est dans un triangle (par l'algèbre linéaire)".
Je ne fais pas de la pub pour mon code, mais je trouve vraiment que ça méritait une amélioration.
j'ai peut etre oublié de dire d'appeler la fonction IsInTriangle pour savoir si un point...

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.