Este artículo del blog de Inigo Quilez argumenta que el uso excesivo de trigonometría (seno, coseno, tangente, arcoseno, arcocoseno, arcotangente) en algoritmos de gráficos 3D es innecesario y a menudo introduce complejidad y errores. La premisa central es que la información que la trigonometría intenta representar (ángulos, orientaciones) puede ser codificada de manera más eficiente y elegante utilizando productos punto y productos cruz de vectores.
Tradicionalmente, los motores de renderizado y bibliotecas matemáticas emplean funciones trigonométricas para calcular rotaciones, como en la función rotationAxisAngle(). Esta función, que rota vectores alrededor de un eje dado, utiliza seno y coseno. El problema, según Quilez, es que a menudo se calcula un ángulo con acos() (arcocoseno) y luego se usa ese ángulo para calcular el seno, creando una operación redundante y costosa (acos(x) seguido de cos()). Esto es especialmente problemático cuando se alinea un objeto con una dirección específica, como alinear una nave espacial con una trayectoria.
El autor propone una alternativa: utilizar directamente el producto cruz para obtener la dirección de rotación y el producto punto para obtener el coseno del ángulo entre los vectores. La magnitud del producto cruz proporciona el seno del ángulo, eliminando la necesidad de acos() y cos(). El ejemplo de código proporcionado, rotationAlign(), demuestra esta técnica, evitando el uso de funciones trigonométricas innecesarias y simplificando el cálculo. Además, se eliminan las llamadas a normalize() y clamp() que a menudo se usan por precaución, pero que pueden ser evitadas con el nuevo enfoque.
La clave es reconocer que los productos punto y cruz encapsulan la información de seno y coseno, respectivamente. Al trabajar directamente con vectores y sus operaciones, se evita la abstracción de los ángulos y se simplifica el código, haciéndolo más eficiente, legible y menos propenso a errores. Quilez enfatiza que esta no es solo una optimización, sino una revelación de una estructura matemática más profunda, donde la redundancia trigonométrica es un indicativo de un enfoque menos directo.
