Fonctions trigonométriques

Contenu du snippet

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.

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.