Echadme una mano con las mates

Buenas, troncos y troncas. He empezado hace pocos día a trabajar en Kandor (granada), y una de mis tareas es desarrollar tecnología para proyectos venideros. Sigo escribiendo código para el rig que estoy construyendo (empecé a colgar cosas en mí blog), y para algunas cosas en concreto estoy teniendo problemas con las mates. Los pocos días que llevo he aprendido mogollón de cosas de trigonometría, vectores, pero hay cosas que aún se me escapan o no sé cómo resolverlas, así que, os cuento.

En concreto, necesito resolver una duda que tiene que ver con el Snap entre IK y FK en el brazo. Intentaré describirlo mejor posible, que la cosa tiene tela.

Veamos: mi cadena IK la forman 3 puntos y un resolutor IK. La cadena FK la forman 3 huesos (upperarm, lowerarm y hand). Hacer blending entre ellas es sencillo: con un simple spinner, los huesos FK se alinean con los puntos IK. Vamos, nada extraordinario. Y a la hora de alinear una solución a otra, el código para FK > IK está resuelto, pero el de IK > FK, no.

En principio y, aunque sé que luego lo tendré que cambiar, mi solución IK sólo consta, como manejador, una shape en la mano que controla todas las opciones: Autostretch, FK/IK blending, hand loocking, elbow, esas cosas. Es decir, no tengo en pantalla ningún pole Vector que controle el swivel. Este valor no viene dado por la posición de ningún objeto, sino que el spinner llamado elbow controla la orientación del codo.

Y después de esta introducción tostón vienen las mates y la geometría. Para alinear el sistema IK al FK necesito hacer dos cosas:
1) alinear el resolutor IK a la posición de la mano (FK).
2) alinear el codo IK (punto rojo) a la posición del antebrazo (FK).

Lo primero, chupado. Lo segundo, se me está atragantando (el esquema puede llevar a engaño, ya que la posición del codo IK cambiara después de alinear el resolutor con la mano). Básicamente, y después de alinear, tengo un punto i2 desplazado x grados con respecto al punto f2.

El punto i2, al animarse (recordemos, con el valor elbow), tiene como recorrido una circunferencia, cuyo radio viene determinado por la distancia entre i1 e i2. Usando algunos datos, es posible obtener la proyección del punto i2 en la recta i1_i3, lo cual marca el radio que tiene esa circunferencia. El centro de la circunferencia es el punto i2.

La distancia la averigüé siguiendo esto: distancia de un punto a una recta.

Pero lo que necesito averiguar son las coordenadas de ese punto. De ese modo puedo averiguar el ángulo existente entre i2 y f2 tomando el centro de la circunferencia como referente, y tendré el dato que (creo) necesito para poder alinear la solución IK con la FK. No puedo sacar esa posición mediante la trigonometría que conozco porque tengo sólo la hipotenusa del triángulo i1_i2_i2. Puede que haya alguna forma de revertir la fórmula de la distancia, pero se me escapa, se me escapa.

Vaya, no sé si se entiende todo esto, pero como habéis algún matemático en el foro, a ver si me podéis echar una mano.

Datos que conocemos:
-Todas las distancias y coordenadas entre puntos i y f.
– La distancia de i2 a i2.
– Las longitudes de f1_f2 y f2_f3 no tienen por qué ser idénticas, de modo que i2 no tiene por qué estar en el centro exacto entre ambas.

Muchas gracias.

Ver sobre el tema y comentarios en el foro