Salut a tous
voila ce code n'a rien d'extraordinaire, il n'affiche qu'un cube en rotation, mais son utilité principale est la suivante :
A partir d'un point dans un repere 3D, on applique une rotation de centre O(Origine) sur les 3 axes, et on retrouve les coordonées du point.
Ce code va, dans mon cas, servir pour un moteur physique (gestion chute des objets etc...)
j'ai mis dans le projet un exemple d'un cube qui illustre la fonction principale.
Vous passez en parametre a cette fonction, les coordonnées du point, les rotations, et elle retourne les nouvelles coordonnées.
En fait c'est juste une matrice de rotation appliquée aux coordonnées du point. je remercie par ailleur VBLover pour ses conseils sur le forum :)
Source / Exemple :
'La matrice est :
'Cos(Z)Cos(Y) Sin(Z)Cos(X)-Cos(Z)Sin(Y)Sin(X) Sin(Z)Sin(X)+Cos(Z)Sin(Y)Cos(X)
'-Sin(Z)Cos(Y) Cos(Z)Cos(X)+Sin(Z)Sin(Y)Sin(X) Cos(Z)Sin(X)-Sin(Z)Sin(Y)Sin(X)
'-Sin(Y) -Cos(Y)Sin(X) Cos(Y)Cos(X)
'Et la fonction de transformation
Private Type PointType
X As Double
Y As Double
Z As Double
End Type
Private Function rotate(Point As PointType, R As PointType) As PointType
rotate.X = Point.X * (Cos(R.Z) * Cos(R.Y)) + Point.Y * (Sin(R.Z) * Cos(R.X) - Cos(R.Z) * Sin(R.Y) * Sin(R.X)) + Point.Z * (Sin(R.Z) * Sin(R.X) + Cos(R.Z) * Sin(R.Y) * Cos(R.X))
rotate.Y = Point.X * (-Sin(R.Z) * Cos(R.Y)) + Point.Y * (Cos(R.Z) * Cos(R.X) + Sin(R.Z) * Sin(R.Y) * Sin(R.X)) + Point.Z * (Cos(R.Z) * Sin(R.X) + Sin(R.Z) * Sin(R.Y) * Cos(R.X))
rotate.Z = Point.X * (-Sin(R.Y)) + Point.Y * (-Cos(R.Y) * Sin(R.X)) + Point.Z * (Cos(R.Y) * Cos(R.X))
End Function
Conclusion :
Voila j'espere ca aidera qqn, parce que j'ai longtemps cherche ca :p
+
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.