Voici un code pour retrouver un vecteur en fonction des coordonées polaires et inversement
ce que j'appelle coordonnées polaires c'est un angle vertical qui va de 0° en haut de la sphère à 180° en bas
et un angle équatorial qui va de 0° derrière la sphère à 360° (fait un tour complet de la droite vers la gauche)
A noter que pour renvoyer les coordonnées polaires je n'ai pas trouvé mieux que de créer un vexteur 2 car une fonction ne renvoi qu'une valeur
Function coordonnées_polaires_vers_cartésiennes(ByVal origine As Vector3, ByVal angle_XY_vertical As Single, ByVal angle_XZ_equatorial As Single, ByVal rayon As Single)
'Angle vertical de 0° (haut) jusque 180°MAXIMUM (180° sont en bas)
'Angle équatorial : 0° (0° derrière 180° devant) jusque 360°
'APRES 180DEGRES L'ANGLE VERTICAL CHANGE L'ANGLE EQUATORIAL
If angle_XY_vertical < 0 Then
angle_XY_vertical = angle_XY_vertical + 180
angle_XZ_equatorial = angle_XZ_equatorial - 180
End If
If angle_XY_vertical > 180 Then
angle_XY_vertical = angle_XY_vertical - 180
angle_XZ_equatorial = angle_XZ_equatorial + 180
End If
If angle_XZ_equatorial < 0 Then angle_XZ_equatorial = angle_XZ_equatorial + 360
If angle_XZ_equatorial > 360 Then angle_XZ_equatorial = angle_XZ_equatorial - 360
Dim longitude, latitude As Single
If angle_XZ_equatorial > 270 Then
longitude = 360 - angle_XZ_equatorial + 90
Else
longitude = 90 - angle_XZ_equatorial
End If
If angle_XY_vertical > 270 Then
latitude = 360 - angle_XY_vertical + 90
Else
latitude = 90 - angle_XY_vertical
End If
latitude = Math.PI * latitude / 180
longitude = Math.PI * longitude / 180
Dim x, y, z As Decimal
x = origine.X + rayon * Math.Cos(latitude) * Math.Cos(longitude)
y = origine.Y + rayon * Math.Sin(latitude)
z = origine.Z + rayon * Math.Cos(latitude) * Math.Sin(longitude)
Return New Vector3(x, y, z)
End Function
Function coordonnées_cartésiennes_vers_polaires(ByVal vectorA As Vector3, ByVal vectorB As Vector3) As Vector2
'Angle vertical de 0° (haut) jusque 180°MAXIMUM (180°en bas)
'Angle équatorial : 0° (derrière) jusque 360° de droite vers la gauche
'Utilisation de la méthode normalize
Dim c As Vector3 = vectorB - vectorA
c.Normalize()
Dim latitude, longitude As Single
latitude = Math.Asin(c.Y)
longitude = Math.Acos((c.X) / (Math.Cos(latitude) + 0.000001)) * 180 / Math.PI
latitude = latitude * 180 / Math.PI
If vectorB.Z - vectorA.Z < 0 Then longitude = -longitude
Dim angle_XY_vertical As Single
Dim angle_XZ_equatorial As Single
If latitude <= 90 And latitude >= 0 Then
angle_XY_vertical = 90 - latitude
Else
angle_XY_vertical = 360 - latitude + 90
End If
If longitude <= 90 And longitude >= 0 Then
angle_XZ_equatorial = 90 - longitude
Else
angle_XZ_equatorial = 360 - longitude + 90
End If
If angle_XY_vertical < 0 Then angle_XY_vertical = angle_XY_vertical + 360
If angle_XZ_equatorial < 0 Then angle_XZ_equatorial = angle_XZ_equatorial + 360
If angle_XY_vertical > 360 Then angle_XY_vertical = angle_XY_vertical - 360
If angle_XZ_equatorial > 360 Then angle_XZ_equatorial = angle_XZ_equatorial - 360
If angle_XZ_equatorial > 0 Or angle_XZ_equatorial < 0 Or angle_XZ_equatorial = 0 Then
Else
angle_XZ_equatorial = 0
End If
If angle_XZ_equatorial = -360 Then angle_XZ_equatorial = 0
Return New Vector2(angle_XY_vertical, angle_XZ_equatorial)
End Function
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.