Esta página está en construcción: perdonen los errores, repeticiones y temas inacabados.
 
This page is being developed: I am sorry for errors, duplications  and unfinished subjects.
 
 
Interpolación de cuaterniones y Matrices (incluido en Danzante)
 
Hemos visto la naturaleza y algún uso de los cuaterniones en Cuaterniones
 
Veamos ahora la interpolación entre dos posiciones de un esqueleto (o cualquier conjunto de puntos). Se trata del mismo esqueleto (posición) rotado por algún proceso. Puede considerarse que el mismo rotado, o que el el esqueletos tomados cada uno dos cámaras, simultáneamente.
 
Se realiza mediante la función Slerp, que admite los dos esqueletos mutuamente rotados y el porcentaje del segundo en la mezcla: 0 es solo el primero. 1 es sólo el segundo. Podemos crear un bucle que vaya calculando y representando el movimiento en tiempo real o simulado. Se realiza mediante la rutina que aparece en la segunda columna de la tabla siguiente.
 .
'-----------------------------------------------------------------
'AQUI PUEDO HACER UN CICLO DE INTERPOLACION, slerp
'VA BIEN
Dim matriz_inter As Matrix3D, Quaternion_inter As Quaternion
For t = 0 To 1 Step 0.01
  Quaternion_inter = Quaternion.Slerp(Quaternion.Identity, quaternion3dimen, t)
  matriz_inter = Matrix3D.Identity
  matriz_inter.Rotate(Quaternion_inter)
  Call transforma_esqueleto(sensor, skel_actual,matriz_inter,Quaternion_inter,0)
  '-----------------------------------------------------------------
  Call dibuja_cuadro_trasformado(sensor, skel_actual)
  System.Windows.Forms.Application.DoEvents()
  Call pausa_ms_libre_compensa_fija(200, 10)
Next t
 
Interpolación en giros o giros graduales
 

Podemos ver estas interpolaciones muy lentamente, eligiendo las matrices y cuaterniones procedentes del esqueleto Kinect (convenientemente convertidas en objetos similares en las librerías MEDIA3D, las cuales, a diferencia de Kinect, admiten operaciones y definiciones cómodamente.

De hecho hemos elegido unas matrices y cuaterniones definidas directamente mediante los ángulos apropiados como datos. Vea aquí esas definiciones. Eligiendo un hueso, arriba a la izquierda, se toman las matrices y cuaterniones (absolutos o jerárquicos) correspondientes a ese hueso. Entonces todo el esqueleto será rotado segun esos elementos gradual y lentamente. Pero asimismo, escribiendo los parámetros (todo son grados sexagesimales) en uno de los lados de la fila inferior de la ventana (primera columna de la tabla citada) podemos generar matrices y cuaterniones libremente. Generamos ambos elementos, uno directamente y el otro derivado de él)  pulsando bien MAR3D, bien QUAT. Esta última opción es la elegida para las rotaciones interpoladas que siguen (vídeos).

 
Vea aquí interpolaciones entre dos conjuntos de puntos rotados, el esqueleto en blanco. Lo rotamos sucesivamente alrededor de los ejes x, y, z.  (click sobre una de las tres imágenes y elegir reproducir).
 
 
Naturalmente, puesto que operamos con esqueletos ya pasados a conjuntos de puntos en el espacio, podemos usar otros conjuntos de puntos, como las caras de Kinect, o figuras espaciales, como icosaedros, o planas en el espacio, como polígonos estrellados. O bien, cualesquiera grafos relacionados con objetos de nuestro mundo, como casas, sillas, edificios. Todos ellos (por el momento, compuestos por puntos unidos por segmentos.
 
Hemos encontrado esta función muy útil para escalonar transformaciones fácilmente. La preferimos a productos de matrices o cuaterniones.
 
 

 
Vuelta al Principio    Última actualización: domingo, 16 de agosto de 2015    Visitantes: contador de visitas