Uno de los retos que nos hemos propuesto es poder analizar poses de Judith a tiempo real con la kinect. La idea es analizar el esqueleto y encontrar poses en su movimiento que provocan acciones determinadas. Como estas poses se tienen que poder descubrir en cualquier parte del espacio y tienen que ser independientes de si está mirando al frente o girada, necesitábamos una magnitud que fuera relativa al esqueleto; la solución que hemos encontrado es medir los ángulos que forman las extremidades para tener una primera pose con 4 ángulos.
Necesitamos conocer los dos vectores v1 y v2 para poder calcular el ángulo que forman. Luego compararíamos los ángulos de los brazos izquierdo y derecho (aib y adb) y de las piernas (aip y adp) con las poses almacenadas con un cierto rango de error para cada ángulo; aún estamos en los inicios y no sabemos cómo funcionará.
La suerte es que Processing tiene implementada una función dentro de PVector que calcula los ángulos entre dos vectores. El único paso que necesitamos es llevar los vectores al origen (0,0,0). Os pongo un pequeño ejemplo de la función. Sabemos que van a surgir problemas pero por lo menos tenemos un camino. Si se os ocurre una opción mejor no dudéis en mandar un correo o poner un comentario: info@colectivomalab.org o malab@distopic.es
PVector v1 = new PVector(0, 400);
PVector v2 = new PVector(200, 80);
void setup(){
size (640,480);
strokeWeight(5);
}
void draw(){
background(125);
line(0,0,v1.x,v1.y);
line(0,0,v2.x,v2.y);
v2.x=mouseX; v2.y=mouseY; //mueve el ratón para cambiar el ángulo
float a = PVector.angleBetween(v1, v2);
println(degrees(a)); // Escribe el ángulo
}
////////////////////////////////////////
Pongo otro sketch de Processing que hace lo mismo pero en los cuatro cuadrantes.
PVector (ángulos) (descarga el archivo y cambia la extensión de .docx a .pde)
PVector puede trabajar con vectores en 3D aunque estos ejemplos sólo usen 2D.

