Rotation dans l'espace 3d > 2d

Description

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

+

Codes Sources

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.