2017-03-07 1 views
1

J'ai un ensemble de points 3D dans un système de coordonnées B que je veux faire pivoter et mettre à l'échelle d'un certain angle theta et un certain facteur d'échelle scale autour de chaque axe de coordonnées système B, puis les transformer en un système de coordonnées différent A. Je connais la transformation 4x4 qui transforme les points dans le système de coordonnées B pour coordonner le système A.Échelle et rotation des points 3D par rapport à l'axe d'un système de coordonnées différent

Par exemple,

J'ai une matrice de transformation

Tr = [0.0065,0.9999,-0.0106,-5.0682 
     -0.0105,-0.0105,-0.9999,1.7843 
     -0.9999,0.0066,0.0105,8.6412 
     0.0000,0.0000,0.0000,1.0000] 

Actuellement, j'utilise Tr pour transformer les points 3D de système de coordonnées B-A. Cependant, je veux modifier Tr (en multipliant les matrices supplémentaires) de telle sorte que, après transformation à A les points sont tournés et mis à l'échelle par theta, scale sur chaque axe du système de coordonnées «B».

Une idée si c'est possible?

+1

Pourriez-vous élaborer - peut-être avec un exemple? Voulez-vous transformer les points en B, effectuer la rotation et la mise à l'échelle et revenir à A? –

+0

L'ensemble de points 3D est-il une image? Voulez-vous tourner dans les axes 'x, y' ou dans les axes' x, y, z'? Si vous voulez tourner en 3D, vous aurez besoin de 'theta1' et' theta2' – smttsp

+0

@NicoSchertler Je commence avec des points dans B. Je veux effectuer une rotation et une mise à l'échelle de l'axe de B, puis transformer les points en A. J'ai édité mon question pour le rendre plus clair. –

Répondre

3
T_scale = [scale_x 0  0  0 
      0  scale_y 0  0 
      0  0  scale_z 0 
      0  0  0  1] 

T_i(theta) = [R_i(theta) [0; 0; 0] 
       [0 0 0] 1  ] 


T = Tr * T_scale * T_z(theta_z) * T_y(theta_y) * T_x(theta_x) 

Avec R_i(theta) tel que défini par wikipedia

0

Si vous avez les 4 × 4 matrices de transformation de A et B comme

 | R_A t_A |   | R_B t_B | 
T_A = |   |  T_B = |   | 
     | 0 1 |   | 0 1 | 

alors de trouver la transformation relative de A -> B

T_AB = inv(T_B)*T_A 

ceci est interprété comme local -> global pour A suivi d'un global -> local pour B.