Pb de transformation 3D avec des matrices
Pour info, j'essaie d'utiliser la bibliothèque Media3D dans un projet WPF
J'ai 2 repères:
x1=0.0 y1=1126.5 z1=805 rx1=0.0 ry1=0.0 rz1=0.0
x2=-49.907 y2=1060.275 z1=791.113 rx2=0.115 ry2=1.9967 rz2=3.2965
J'ai plusieurs points 3D dont j'ai les coordonnées dans les deux repères (justement pour valider les calculs), en voici un dans le repère 1:
px1=1490.458 py1=-1126.5 pz1=1459.4 prx1=180.0 pry1=81.6634 prz1=180.0
le même point dans le repère 2
px2=1424.618 py2=-1144.036 pz2=1526.147 prx2=180.0 pry2=83.6634 prz2=176.7055
Donc si je ne me trompe pas, mon vecteur de déplacement entre les 2 repères c'est (-49.907, -66.225, -13.887)
Pour la translation je fais donc:
Code:
1 2 3 4 5 6
| Vector3D vectNewRepere = new Vector3D(-49.907, -66.225, -13.887);
Point4D pointDep = new Point4D(1490.458, -1126.5, 1459.4, 1);
Point4D pointFin = new Point4D();
TranslateTransform3D matTransl = new TranslateTransform3D(vectNewRepere);
pointFin = matTransl.Transform(pointDep); |
Ensuite pour les rotation en RX, RY et RZ, je fais ça "à la main" car je n'ai pas trouvé comment faire ça avec la bibliothèque, sachant que a, b et c sont mes valeurs de rotation en radians, voici ma matrice 4D:
(cos(a)*cos(b), sin(a)*cos(c)+cos(a)*sin(b)*sin(c), sin(a)*sin(c)-cos(a)*sin(b)*cos(c), 0
-sin(a)*cos(b), cos(a)*cos(c)-sin(a)*sin(b)*sin(c), cos(a)*sin(c)+sin(a)*sin(b)*cos(c), 0
sin(b), -cos(b)*sin(c), cos(b)*cos(c), 1
0, 0, 0, 1)
Et donc dans mon code, APRES avoir fait la translation, je fais ça:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| double aDeg = 0.115;
double bDeg = 1.9967;
double cDeg = 3.2965;
double a = -aDeg * Math.PI / 180;
double b = -bDeg * Math.PI / 180;
double c = -cDeg * Math.PI / 180;
double ca = Math.Cos(a);
double sa = Math.Sin(a);
double cb = Math.Cos(b);
double sb = Math.Sin(b);
double cc = Math.Cos(c);
double sc = Math.Sin(c);
Matrix3D matriceRotateXYZ = new Matrix3D((ca * cb), (sa * cc + ca * sb * sc), (sa * sc - ca * sb * cc), 0,
(-sa * cb), (ca * cc - sa * sb * sc), (ca * sc + sa * sb * cc), 0,
sb, (-cb * sc), (cb * cc), 0,
0, 0, 0, 1);
pointDep = pointFin;
pointFin = pointDep * matriceRotateXYZ; |
Dans "pointFin" je retrouve: (1386.9165, -1107.68333, 1561.02155, 1446.513)
Ce qui n'est pas du tout ce que je devrais obtenir!!! :aie::(
J'ai du me tromper quelque part, ça c'est certain, mais je ne vois pas où pour l'instant... Si quelqu'un a une idée, je prends!