Rotation dans l'espace 3d > 2d

Soyez le premier à donner votre avis sur cette source.

Vue 20 083 fois - Téléchargée 1 259 fois

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

Ajouter un commentaire Commentaires
teq4 Messages postés 2 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 30 mai 2009
30 mai 2009 à 16:18
merci ;) simple, et qui marche :d
EvildarkEurope Messages postés 51 Date d'inscription dimanche 11 décembre 2005 Statut Membre Dernière intervention 11 octobre 2014
26 févr. 2008 à 20:36
Clair et simple, merci :P
Choumoumou Messages postés 162 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 17 novembre 2010
11 déc. 2005 à 00:01
Merci beaucoup ! ce code va énormément m'aider pour mon jeu de shoot (pour faire tourner les persos).

10/10 ! Pourkoi noter moins ? Ce code est éxactement ce qu'indique le titre :D !

@+ !
Thanatoster Messages postés 14 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 20 janvier 2006
8 juin 2005 à 17:58
salut à vous tous, je voudrais savoir si il est possible de changer la couleur des points et des lignes et surtout savoir comment... Mais aussi s'il est possible de lui attribuer une zone précise parce que lorsque je resize ma form la taille du cube change aussi, ce que je voudrais c'est l'insérer dans un autre programme genre en haut à gauche en pas-trop-grand.
voila, merci déjà pour ce petit cube qui donne super bien.
cs_aerith Messages postés 54 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 12 mars 2006
25 mai 2005 à 16:50
mouai, bon ok, je ferais un tuto dans un grand moment de bontée (mais la demo sera en C :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.