I have 3D points A,B,C,D and E. These points are not coplanar or collinear. I can obtain points A' and B' in another coordinate system that preserve the original AB distance. With just this information, can I obtain points C', D' and E' that have A'C', A'D', etc, distances, angles and relationships just as the original AC, AD, etc?
I have tried various methods attempting rotation matrices that didn't work. I was trying to find a rotation matrix that would map A to A' and B to B', and use that to obtain C', D' and E', but it didn't work. The closest I got was with:
C_prime = A_prime + (C - A)
D_prime = A_prime + (D - A)
E_prime = A_prime + (E - A)
(A_prime, A, C, D and E are numpy arrays of the 3D coordinates). This gives me C', D' and E' that are the correct distances from A', but not B'. Using B and B_prime instead of A and A_prime gives the opposite. How do I combine the two constraints? I am using python and numpy.
ONE possible image comes from
C_prime = A_prime + R(C - A)etc, whereRis the rotation matrix that would takeABtoA_prime B_primeand C is any of the other points. The rotation matrix can (usually) be found from the angle between those two vectors and an axis formed from their cross product ... except in the case where they are colinear and hence the cross product is 0.Note that this transformation is NOT UNIQUE, since you could subsequently apply any rotation that you liked about
A_prime B_primeand still preserve distances and relative angles.You must also enforce that
ABhas the same length asA_prime B_prime.In the code below the points are the rows of array
pts[,]. My apologies for the lousy 3-d plot: not my strong point.Output: