Resultados 1 al 9 de 9

Tema: Echadme una mano con las mates

  1. #1
    Fecha de ingreso
    Apr 2002
    Mensajes
    14,651

    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.
    Miniaturas adjuntas Miniaturas adjuntas Clic en la imagen para ver su versión completa. 

Nombre: mate1.jpg 
Visitas: 112 
Tamaño: 44.1 KB 
ID: 70339  
    Última edición por ikerCLoN; 06-04-2008 a las 23:39

  2. #2
    Fecha de ingreso
    Oct 2004
    Mensajes
    10,798

    Echadme una mano con las mates

    Ahora viene Klópes.

  3. #3
    Fecha de ingreso
    Jun 2002
    Mensajes
    2,429

    Echadme una mano con las mates

    Anoche iba a enviar esto, pero le pasaba algo al foro así que, ahí va. Ni idea si los tiros van por aquí por lo que te comento en seguida:
    No estoy nada puesto en rigging, aunque si como dices el problema consiste en localizar las coordenadas del punto más cercano a un punto dado y teniendo la función (ecuación) de la recta a la que pertenece ese punto más cercano se puede hallar de este modo, tipo cuenta de la vieja, pero efectivo. Es seguro que se puede abreviar este método. Ignoro como encontrar una fórmula para encontrar las coordenadas en cada punto cuando ese punto gira como en el diagrama que muestras del codo. Pero en el caso del problema que presentas de vitutor las coordenadas en cuestión se hallarían así:
    En el diagrama cartesiano de la solución de distancia entre rectas tenemos las coordenadas p1 y p2 del punto p. Trazando la paralela al eje X sobre el punto p obtenemos un nuevo punto en la recta s que llamamos que con coordenadas q1 y q2, q2 la conocemos por ser la misma que p2, q1 se resuelve al tener la ecuación de la recta s:
    3x + 4y = 0.

    Una vez que tenemos las coordenadas de los dos puntos p y que nos falta encontrar las coordenadas del punto que tengo entendido que es lo que buscas. P que y forman un triángulo recto con el ángulo recto en m.

    Tenemos la distancia pm, el primer cateto, que es la solución primero encontrada.

    Podemos averiguar la distancia de la hipotenusa porque al tener ya sus coordenadas (q1-p1).

    Esto nos lleva por el teorema de Pitágoras a averiguar la distancia del segundo cateto qm.

    Con estos datos, es decir las tres distancias del triángulo y las coordenadas de dos de sus vértices es ya más fácil averiguar las coordenadas del tercer vértice que es lo que se busca:
    Distancia entre dos puntos cartesianos:
    Entre los puntos que y m:
    Distancia qm = v((m1-q1)+(m2-q2)) donde v es la raíz cuadrada de.

    Entre los puntos p y m:
    Distancia pm = v((m1-p1)+(m2-p2)).

    Lo que resulta en una ecuación de dos incógnitas m1 y m2 también fácilmente resuelta con tu conocimiento del tema. Por cierto, no te estarás complicando la vida mucho ahí en grana ? Saludos.

  4. #4
    Fecha de ingreso
    Apr 2002
    Mensajes
    14,651

    Echadme una mano con las mates

    Gracias por la respuesta, Airbrush. Me guardo el hilo y le echo un vistazo más tarde. Tengo otra solución FK/IK mucho más sencilla, y creo que será la que use finalmente, pero ya por cabezonería me apetece resolver este dilema.

    Gracias de nuevo.

  5. #5
    Fecha de ingreso
    Jan 2007
    Mensajes
    915

    Echadme una mano con las mates

    ¿Si consigues dar con la distancia entre i1 - I2 obtendrías las coordenadas de i2? Si es así, entonces por una simple formula lo puedes sacar.

    Si no, entonces se complica la cosa. Suerte.

  6. #6
    Fecha de ingreso
    Jul 2005
    Mensajes
    7,953

    Echadme una mano con las mates

    Hola. O sea, que tienes el IkerClon y lo quieres convertir a fkrclon. (lol). He estado escribiendo algo general, pero antes de seguir me gustaría tener claro lo que quieres. Quieres pasar la solución de IK a FK: esto significa: ¿tienes cuaternios, ángulos? Y quieres ¿coordenadas de los puntos, ángulos?
    Otra cosa, no entiendo que el recorrido del codo sea esa circunferencia: ¿no rota sobre el hombro, que es i1?
    En todo caso, si la cosa es como dices, el punto se halla como la intersección de la recta i1-i3 con el plano perpendicular que pasa por i2. O sea:
    Sean el Vector i1i3 = (a,b,c), y el punto i2 = (a, b, c), entonces el plano es ax+by+cz+d=0. Lo que falta es hallar d, pero como el plano contiene a i2, sólo hay que sustituir sus coordenadas en la ecuación:
    Aa+bb+cc+d=0, y de aquí:
    d=-aa-bb-cc.

    Así tenemos el sistema formado por la ecuación de la recta, y el plano, resolviéndolo obtenemos i2, y el ángulo que hay que girar es:
    cos(ángulo) = v1 · v2 / |v1|·|v2|.
    (Siendo v1=i2i2, v2=i2f2 los vectores que unen i2 con i2 y f2 respectivamente).
    ...y estaba superbueno.
    Y miré su perfil. Y vi que era amigo de Daniela. Puaf.


    Dos niñas en el parque

    no se elevará, nunca más

  7. #7
    Fecha de ingreso
    Jul 2005
    Mensajes
    7,953

    Echadme una mano con las mates

    A lo que iba: Esa fórmula que has encontrado para la distancia a una recta sirve en el plano, no en el espacio, al pasar a 3d, se utiliza en realidad para la distancia de un punto a un plano, y eso no te sirve.

    Supongo que la solución que quieres es específica para ese cadena de dos huesos y 3 puntos, ¿no? Porque esa es la única forma de obtener el punto intermedio exactamente, si quisieras hacer una solución IK general, no hay forma de hallar los puntos intermedios, las soluciones son infinitas y, además tendrías que iterar.

    Supongamos que estuvieras en el plano, si tienes los puntos del hombro (p1) y de la mano (p3), hallar el del codo (p2) es fácil: tienes que imaginar una circunferencia centrada en p1 y otra en p3, con los radios iguales a la longitud de cada hueso, y hacer el sistema de ecuaciones de 2º grado que sale. Aparecen dos soluciones: la buena, y la del codo roto (imagina un escanciador asturiano al que le rotan el brazo 180 grados en los ejes de sus huesos. Doloroso).

    Eso, si es en el plano.

    En el espacio la cosa se complica, en vez de circunferencias tienes esferas, y la solución no son dos puntos sino la intersección de ambas esferas, que es una circunferencia. Así que tenemos infinitas soluciones, una de esas soluciones es el propio punto i2. La solución a elegir quizá dependa de la rotación inicial que tenga el hueso k1k2.
    ...y estaba superbueno.
    Y miré su perfil. Y vi que era amigo de Daniela. Puaf.


    Dos niñas en el parque

    no se elevará, nunca más

  8. #8
    Fecha de ingreso
    Jun 2005
    Mensajes
    16,790

    Echadme una mano con las mates

    O sea, que tienes el IkerClon y lo quieres convertir a fkrclon. (lol). He estado escribiendo algo general, pero antes de seguir me gustaría tener claro lo que quieres. Quieres pasar la solución de IK a FK: esto significa: ¿tienes cuaternios, ángulos? Y quieres ¿coordenadas de los puntos, ángulos?
    Otra cosa, no entiendo que el recorrido del codo sea esa circunferencia: ¿no rota sobre el hombro, que es i1?
    En todo caso, si la cosa es como dices, el punto se halla como la intersección de la recta i1-i3 con el plano perpendicular que pasa por i2. O sea:
    Sean el Vector i1i3 = (a,b,c), y el punto i2 = (a, b, c), entonces el plano es ax+by+cz+d=0. Lo que falta es hallar d, pero como el plano contiene a i2, sólo hay que sustituir sus coordenadas en la ecuación:
    Aa+bb+cc+d=0, y de aquí:
    d=-aa-bb-cc.

    Así tenemos el sistema formado por la ecuación de la recta, y el plano, resolviéndolo obtenemos i2, y el ángulo que hay que girar es:
    cos(ángulo) = v1 · v2 / |v1|·|v2|.
    (Siendo v1=i2i2, v2=i2f2 los vectores que unen i2 con i2 y f2 respectivamente).
    Dios, lo que daría por poder soltar algo así en un party en ese momento crítico en que la peña se da cuenta de que la bebida empieza a escasear.
    Ahora que soy inmensamente rico, me ha dado por aprender Blender

  9. #9
    Fecha de ingreso
    Jul 2005
    Mensajes
    7,953

    Echadme una mano con las mates

    Dios, lo que daría por poder soltar algo así en un party en ese momento crítico en que la peña se da cuenta de que la bebida empieza a escasear.
    ¿por qué crees que mis charlas en las blendiberias me las ponen siempre el sábado a partir de las 11 de la noche?
    ...y estaba superbueno.
    Y miré su perfil. Y vi que era amigo de Daniela. Puaf.


    Dos niñas en el parque

    no se elevará, nunca más

Temas similares

  1. Blender Mates de Ajedrez en Blender
    Por Soliman en el foro Animación y Rigging
    Respuestas: 7
    : 08-09-2022, 12:27
  2. Respuestas: 0
    : 24-03-2021, 11:53
  3. After Effects Previsualización incompleta en After Effects echadme una mano
    Por TxOne en el foro Programas de Diseño 3D y CAD
    Respuestas: 0
    : 06-06-2011, 16:47
  4. Echadme un cable
    Por RavenX en el foro Programas de Diseño 3D y CAD
    Respuestas: 9
    : 05-02-2007, 14:27
  5. F1 f1 echadme un cable
    Por RJ-45 en el foro Modelado
    Respuestas: 4
    : 30-03-2004, 23:35