Search code examples
matlabmath3dgeometrycoordinate-systems

Scale and rotate 3D points with respect to axis of a different coordinate system


I have a set of 3D points in a coordinate system B which I want to rotate and scale by certain angle theta and certain scaling factor scale about each axis of coordinate system B and then transform them to a different coordinate system A. I know the 4x4 transformation which transforms points in coordinate system B to coordinate system A.

For example,

I have a transformation matrix

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]

Currently, I use Tr to transform 3D points from coordinate system B to A. However, I want to modify Tr (by multiplying additional matrices) such that, after transformation to A the points are rotated and scaled by theta, scale about each axis of of coordinate system `B'.

Any idea if this is possible?


Solution

  • 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)
    

    With R_i(theta) as defined by wikipedia