Rotation 3d

Soyez le premier à donner votre avis sur cette source.

Vue 18 618 fois - Téléchargée 1 196 fois

Description

Code permettant de calculer la rotation d'un point en 3D autour d'un vecteur.

Source / Exemple :


'' 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

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
15
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
29 août 2006

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.
Messages postés
25
Date d'inscription
jeudi 1 septembre 2005
Statut
Membre
Dernière intervention
6 août 2018
1
Hum! c'est fumeux pour moi, donne moi un ou deux exemples pratiques de l'utilisation de ton code.
Merci a+

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.