Rotation dans l'espace 3d > 2d

Soyez le premier à donner votre avis sur cette source.

Vue 19 268 fois - Téléchargée 1 196 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
-
merci ;) simple, et qui marche :d
EvildarkEurope
Messages postés
52
Date d'inscription
dimanche 11 décembre 2005
Statut
Membre
Dernière intervention
11 octobre 2014
-
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
-
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
-
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
-
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.