Visual Basic est dénué de certaines fonctions trigonométriques de base. Voici cinq fonctions, la première renvoie la mesure principale d'un angle, la seconde calcule l'hypothénuse d'un triangle rectangle, la troisème l'inverse d'un cosinus, la quatrième l'inverse d'un sinus et la dernière un angle en radian entre une droite définie par deux points (X, Y),(Cx, Cy) et une horizontale passant par (Cx, Cy). La mesure de cette angle est calculée par rapport au sens trigonométrique direct (sens inverse des aiguilles d'une montre). Il est compris dans [-Pi;Pi] et peut donc être négatif.
Source / Exemple :
Public Function MesurePrincipale(Angle) As Single
Pi = 3.14
While Angle > Pi
Angle = Angle - 2 * Pi
Wend
While Angle < -Pi
Angle = Angle + 2 * Pi
Wend
MesurePrincipale = Angle
End Function
Public Function Hyp(X1, Y1, X2, Y2)
Hyp = Sqr((X1 - X2) ^ 2 + (Y1 - Y2) ^ 2)
End Function
Public Function InvCos(X) As Single
Pi = 3.14
For Ang = 0 To 2 * Pi Step Pi / 100
Aprox1 = Cos(Ang - Pi / 200)
Aprox2 = Cos(Ang + Pi / 200)
If Aprox1 > Aprox2 Then
Temp = Aprox1
Aprox1 = Aprox2
Aprox2 = Temp
End If
If X >= Aprox1 And X <= Aprox2 Then InvCos = Ang: Exit For
Next
End Function
Public Function InvSin(X) As Single
Pi = 3.14
For Ang = 0 To 2 * Pi Step Pi / 100
Aprox1 = Sin(Ang - Pi / 200)
Aprox2 = Sin(Ang + Pi / 200)
If Aprox1 > Aprox2 Then
Temp = Aprox1
Aprox1 = Aprox2
Aprox2 = Temp
End If
If X >= Aprox1 And X <= Aprox2 Then
InvSin = Ang: Exit For
End If
Next
End Function
Public Function AngleTrigo(X, Y, Cx, Cy)
Pi = 3.14
Xd = X - Cx
Yd = Y - Cy
Larg = Sqr(Xd ^ 2 + Yd ^ 2)
A = Xd / Larg
B = Yd / Larg
Poss1 = MesurePrincipale(InvCos(A))
Poss2 = MesurePrincipale(2 * Pi - Poss1)
Poss3 = MesurePrincipale(InvSin(B))
Poss4 = MesurePrincipale(Pi - Poss3)
A1 = Abs(Poss1 - Poss3)
A2 = Abs(Poss1 - Poss4)
A3 = Abs(Poss2 - Poss3)
A4 = Abs(Poss2 - Poss4)
If A1 <= A2 And A1 <= A3 And A1 <= A4 Then AngleTrigo = (Poss1 + Poss3) / 2
If A2 <= A1 And A2 <= A3 And A2 <= A4 Then AngleTrigo = (Poss1 + Poss4) / 2
If A3 <= A2 And A3 <= A1 And A3 <= A4 Then AngleTrigo = (Poss2 + Poss3) / 2
If A4 <= A2 And A4 <= A3 And A4 <= A1 Then AngleTrigo = (Poss2 + Poss4) / 2
End Function
Conclusion :
Note : les fonctions InvCos et InvSin calculent les angles à 1/100e de Pi près. Il est possible cepandant d'affiner le réglage en diminuant la taille du bond dans les boucles for et en conservant un interval d'approximation défini par les variables Aprox1 et Aprox2 toujours égal à Ang (+ ou -) Bond / 2.
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.