begin process at 2012 05 27 19:06:49
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths

 > ROTATION 3D

ROTATION 3D


 Information sur la source

Note :
Aucune note
Catégorie :Maths Classé sous :math, 3d, rotation, calcul Niveau :Débutant Date de création :23/08/2005 Vu / téléchargé :16 149 / 1 044

Auteur : cuq

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Code permettant de calculer la rotation d'un point en 3D autour d'un vecteur.

Source

  • '' Ne pas oublier d'initialiser la constante DEGTORAD permettant de convertir les degrée en radian
  • '' globalDEGTORAD As Double
  • '' Dans form.laod par exemple je rajoute : DEGTORAD = (4 * Atn(1)) / 180
  • ''
  • ''
  • '---------------------------------------------------------------------------
  • ' Point en 3D
  • '---------------------------------------------------------------------------
  • Public Type Point3
  • X As Double
  • Y As Double
  • Z As Double
  • End Type
  • global PI As Double
  • global RADTODEG As Double
  • global DEGTORAD As Double
  • Function Rotation3D(Vect As Point3, Angle As Double, P1 As Point3) As Point3
  • Dim MRotation(2, 2) As Double
  • Dim Row As Integer
  • Dim Col As Integer
  • Dim Mid As Integer
  • Dim I(2, 2) As Double
  • Dim A(2, 2) As Double
  • Dim A2(2, 2) As Double
  • Dim Sn As Double
  • Dim CosM1 As Double
  • Dim AngleRadian As Double
  • AngleRadian = Angle * DEGTORAD
  • ' Matrice Identité
  • I(0, 0) = 1: I(0, 1) = 0: I(0, 2) = 0:
  • I(1, 0) = 0: I(1, 1) = 1: I(1, 2) = 0:
  • I(2, 0) = 0: I(2, 1) = 0: I(2, 2) = 1:
  • ' Rotation autour du vecteur
  • A(0, 0) = 0: A(0, 1) = -Vect.Z: A(0, 2) = Vect.Y:
  • A(1, 0) = Vect.Z: A(1, 1) = 0: A(1, 2) = -Vect.X:
  • A(2, 0) = -Vect.Y: A(2, 1) = Vect.X: A(2, 2) = 0:
  • ' A2 = A*A
  • For Row = 0 To 2
  • For Col = 0 To 2
  • A2(Row, Col) = 0
  • For Mid = 0 To 2
  • A2(Row, Col) = A2(Row, Col) + A(Row, Mid) * A(Mid, Col)
  • Next Mid
  • Next Col
  • Next Row
  • Sn = Sin(AngleRadian)
  • CosM1 = 1 - Cos(AngleRadian)
  • ' rotation est I+sin(angle)*A+[1-cos(angle)]*A*A'
  • For Row = 0 To 2
  • For Col = 0 To 2
  • MRotation(Row, Col) = I(Row, Col) + Sn * A(Row, Col) + CosM1 * A2(Row, Col)
  • Next Col
  • Next Row
  • Rotation3D.X = MRotation(0, 0) * P1.X + MRotation(0, 1) * P1.Y + MRotation(0, 2) * P1.Z
  • Rotation3D.Y = MRotation(1, 0) * P1.X + MRotation(1, 1) * P1.Y + MRotation(1, 2) * P1.Z
  • Rotation3D.Z = MRotation(2, 0) * P1.X + MRotation(2, 1) * P1.Y + MRotation(2, 2) * P1.Z
  • End Function
'' Ne pas oublier d'initialiser la constante DEGTORAD permettant de convertir les degrée en radian
'' globalDEGTORAD As Double
'' Dans form.laod par exemple je rajoute :  DEGTORAD = (4 * Atn(1)) / 180
''
'' 
'---------------------------------------------------------------------------
' Point en 3D
'---------------------------------------------------------------------------
Public Type Point3
    X As Double
    Y As Double
    Z As Double
End Type

global PI As Double
global RADTODEG As Double
global DEGTORAD As Double

Function Rotation3D(Vect As Point3, Angle As Double, P1 As Point3) As Point3
   Dim MRotation(2, 2) As Double
   Dim Row As Integer
   Dim Col As Integer
   Dim Mid As Integer
   Dim I(2, 2) As Double
   Dim A(2, 2) As Double
   Dim A2(2, 2) As Double
   Dim Sn As Double
   Dim CosM1 As Double
   Dim AngleRadian As Double

   AngleRadian = Angle * DEGTORAD

   ' Matrice Identité
    I(0, 0) = 1: I(0, 1) = 0: I(0, 2) = 0:
    I(1, 0) = 0: I(1, 1) = 1: I(1, 2) = 0:
    I(2, 0) = 0: I(2, 1) = 0: I(2, 2) = 1:

   ' Rotation autour du vecteur
    A(0, 0) = 0:        A(0, 1) = -Vect.Z:  A(0, 2) = Vect.Y:
    A(1, 0) = Vect.Z:   A(1, 1) = 0:        A(1, 2) = -Vect.X:
    A(2, 0) = -Vect.Y:  A(2, 1) = Vect.X:   A(2, 2) = 0:

   ' A2 = A*A
    For Row = 0 To 2
        For Col = 0 To 2
            A2(Row, Col) = 0
            For Mid = 0 To 2
                A2(Row, Col) = A2(Row, Col) + A(Row, Mid) * A(Mid, Col)
            Next Mid
        Next Col
    Next Row
    Sn = Sin(AngleRadian)
    CosM1 = 1 - Cos(AngleRadian)

   ' rotation est I+sin(angle)*A+[1-cos(angle)]*A*A'
    For Row = 0 To 2
        For Col = 0 To 2
            MRotation(Row, Col) = I(Row, Col) + Sn * A(Row, Col) + CosM1 * A2(Row, Col)
        Next Col
    Next Row
    
    Rotation3D.X = MRotation(0, 0) * P1.X + MRotation(0, 1) * P1.Y + MRotation(0, 2) * P1.Z
    Rotation3D.Y = MRotation(1, 0) * P1.X + MRotation(1, 1) * P1.Y + MRotation(1, 2) * P1.Z
    Rotation3D.Z = MRotation(2, 0) * P1.X + MRotation(2, 1) * P1.Y + MRotation(2, 2) * P1.Z


End Function


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture PILOTER GOOGLEEARTH AVEC SES API
Source avec Zip Source avec une capture VISUALISATEUR / EDITEUR OPENGL
Source avec Zip Source avec une capture FORCER LE "." POINT COMME PARAMÈTRE DÉCIMAL DANS LES PARAMÈT...
Source avec Zip Source avec une capture JEUX DE COMBAT OPENGL
Source avec Zip Source avec une capture MENU DÉROULANT FAÇON XP SANS OCX

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) PERMUTATIONS DE CARACTÈRES par alpha5
Source avec Zip Source avec une capture PARTICIPATION À L'APPRENTISSAGE DE LECTURE DE L'HEURE (PENDU... par oulipan
Source avec Zip Source avec une capture TECHNIQUE TRADITIONNELLE DE LA DIVISION par oulipan
Source avec Zip Source avec une capture ENTRAÎNEMENT POUR EFFECTUER DES MULTIPLICATIONS EN COLONNES ... par oulipan
Source avec Zip Source avec une capture CONVERTISSEUR HEXAVIGÉSIMAL par shaeks

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) MATRICE DE ROTATION, QUATERNION ET 3D par CGSI3
Source avec Zip Source avec une capture FAIRE UN CUBE EN 3D ET LE FAIRE TOURNER SANS UTILISER DIRECT... par zulrigh
Source avec Zip CALCULS SUR DE GRANDS NOMBRES (PLUSIEURS MILLIERS DE CHIFFRE... par apexinfo
Source avec Zip Source .NET (Dotnet) PROBABILITES par alpha5
Source avec Zip Source avec une capture CALCUL DES 3 ROTATIONS D'UN REPÈRE 3D SUR MACHINE À MESURER par lexsty

Commentaires et avis

Commentaire de Magentha le 04/09/2005 05:27:36

Hum! c'est fumeux pour moi, donne moi un ou deux exemples pratiques de l'utilisation de ton code.
Merci a+

Commentaire de virtuA le 18/04/2006 10:10:09

Lut,
Trés interessant ce code, il faudrait que je puisse le tester
j'ai une application avec un capteur magnétique ou cela pourrais m'être utile !
Est-il possible d'avoir un exécutable dans vos fichiers,
merci.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

3D rotation caméra [ par Radiohead4ever ] RadioHead4Ever Sauvegarde image apres rotation [ par alihome ] Bonjour à tous,J'ai trouver un code pour faire une rotation de mon image dans une picturebox et je souhaiterais pouvoir l'enregistrer par la suite ''à cube 3d en rotation [ par bobo91 ] bonjour tous le mondecomme je connais pas le monde de directx sous vb6je m'adresse a vous pour m'aidera declarer directx et a construire les instrucio VB.Net Calcul math ??? [ par JeffC1977 ] Salut... Je fasi un calcul mathématique et certaine ligne de codefonctionne et une en particulière me donne une valeur bisare soit, -1.#INDOudblTextbo Détermination d'angle et rotation d'image [ par bubulle122 ] Bonjour, Je charge une image (carrée) avec un angle alpha inconnu par rapport à l'horizontale. Je voudrais déterminer cet angle et remettre mon image Math 3D changement de repere [ par Stephane ] Salut a tous voila j'ai beau brainer comme un dingue () j'arrive pas a trouver la relation qu'il faut. Voila le probleme Soit T le repere principal Objets 3D independant en movements [ par sofien007 ] je voudrais savoir comme faire pour que je puisse animer ou deplacer chaque objet 3d de mon univers indepedemment des autres. Merci OpenGL & transformations [ par Stephane ] Salut a tous Voila je debute en OpenGl. Je trace des lignes avec     glBegin bmLines         glVe algo calcul mp3 [ par DarkLanfeust ] Salut à tous !Je fais un TIPE sur le mp3 (exposé a présenter aux concours d'ecoles d'ingé), et il me manque cruellement un apport Un INSERT trop lent !!!! [ par PtitGrumo ] Bonjour tous,Sous Access VBA :Voila j'ai deux formulaires FormA et FormBLe FormA effectue des calculs sur des fiches saisi dans le formulaire FormBOui


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales