Soyez le premier à donner votre avis sur cette source.
Vue 18 737 fois - Téléchargée 1 197 fois
'' 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
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.
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.