Actualmente me enfrento a un problema y creo que he encontrado la solución. Sin embargo, me interesaría conocer su opinión o sugerencias al respecto.
He escrito un software de modelado geométrico y tengo usuarios que quieren definir una serie de cuerpos diferentes (por ejemplo, cilindros, esferas, elipsoides, etc.) proporcionando los coeficientes de la ecuación general de superficie cuádrica:
$$ax^2 + 2bxy + 2cxz + 2dx + \dots=0$$
que en general puede escribirse también utilizando una matriz de coeficientes $Q$ y un vector fila $v:$
$$v Q v^t$$
Mi modelador de sólidos ya proporciona varios objetos diferentes como cilindros, elipsoides, etc., pero están definidos en un sistema canónico (por ejemplo, cilindro paralelo al $\,z\,$ ) y llevar una matriz de transformación para colocarlos en la posición correcta para el renderizado.
Para tratar cuerpos definidos por cuádricas generales tengo que hacer dos cosas:
1.) Determinar qué tipo de superficie se ha definido
2.) Obtener la matriz de transformación que transformará la superficie respectiva a la posición/orientación que se incluye implícitamente en los coeficientes de la cuádrica.
Después de hacer un poco de álgebra se me ocurrió la siguiente idea para 2).
Se me ocurrió abordar la cuestión mediante la transformación del eje principal. Así que primero trataría de determinar los valores propios y los vectores propios de la matriz de coeficientes $Q.$ La matriz que está representada por los vectores propios en sus columnas debe transformar mi matriz de coeficientes en el sistema canónico.
Si tomo la inversa de esta matriz propia, ésta debería ser mi matriz de transformación, ¿o me equivoco? Los valores propios determinarán la magnitud de parámetros como el radio de las esferas y los cilindros, los semiejes mayor y menor de los elipsoides, etc.
Si alguien tiene una solución más sencilla, estaré encantado de discutirla también.
Muchas gracias. Chris