Tengo algunas transformaciones en coordenadas homogéneas 3D que incluyen rotación de tres ejes, traslación y deformación (deformación lineal):
$$\\ T P = P' \\ T = D R_z R_y R_x S $$
$$ D = \begin{bmatrix} 1 & 0 & 0 & d_x \\ 0 & 1 & 0 & d_y \\ 0 & 0 & 1 & d_z \\ 0 & 0 & 0 & 1 \end{bmatrix}\\ R_z = \begin{bmatrix} \cos a & -\sin a & 0 & 0 \\ \sin a & \cos a & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}\\ R_y = \begin{bmatrix}\cos b & 0 & -\sin b & 0 \\ 0 & 1 & 0 & 0 \\ -\sin b & 0 & \cos b & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \\ R_x = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & \cos c & -\sin c & 0 \\ 0 & \sin c & \cos c & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \\ S = \begin{bmatrix} m_x & 0 & 0 & 0 \\ 0 & m_y & 0 & 0 \\ 0 & 0 & m_z & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} $$
$P$ y $P'$ son de tamaño idéntico $4 \times n$, donde $n$ es el número de puntos. Tengo cierto control sobre el número de puntos, pero probablemente deberían ser al menos 3.
Dados $P$ y $P'$, necesito resolver todos los parámetros de la transformación: $a, b, c, d_x, d_y, d_z, m_x, m_y, m_z$. Si $n$ se establece en 4, entonces al menos $T = P'/P$ es una inversión de matriz directa, aunque $n$ podría ser mayor y probablemente tendría que usar una pseudoinversa.
Voy a utilizar una biblioteca numérica (aún no elegida), pero por el momento:
- ¿Cuánto de esta solución se puede hacer de manera analítica?
- ¿Hay alguna manera de reformular el problema para hacer la solución más fácil? (Consideré coordenadas esféricas pero no estoy muy seguro de cómo debería proceder)
Probé un par de solucionadores numéricos multivariables no lineales de fuerza bruta en esto y ambos (no sorprendentemente) se atascaron.