Preparación para Lluvia Interactiva V4: Synapse + Synapse Reciever

Me hablaron en un curso que realicé de este programa, y he decidido probarlo.

La verdad que es realmente sencillo hacerlo funcionar a simple vista. Ejecutas el programa y directamente, poniéndote  en posición de “cactus” te detecta.

Synapse es una aplicación para Mac realizada por Ryan Challinor, el cual permite usar Kinect con varios software, entre ellos Processing.

El programa detecta el esqueleto y las articulaciones y las envía a través de mensajes OSC, si ejecutamos el SynapseReciever (realizado por Dan Wilcox) en Processing, éste recibe los mensajes y los transforma en un simpático muñeco que aparece en nuestro sketch de Processing.

De momento le encuentro una pega grande, sólo trackea un usuario y este está formado por el esqueleto. Aun así, decido introducir este personaje en el código de la lluvia.

Lo introduzco, pero claro, no es un objeto fijo, con lo que inserto un cubo en las coordenadas de la cabeza y del brazo derecho. Y compruebo que si que rebotan las partículas.

Aquí me surge la cuestión, si pongo una línea queda en la coordenada x,y del brazo izquierdo, puedo indicar donde acaba en x,y derecho, pero no puedo decirle el ángulo que tiene esa articulación. Y en box2D no se puede generar un vertex, que es el que permite decir punto inicial, punto final para hacer una línea uniendo estos puntos.

La idea que se me ocurre es intentar sacar el ángulo, según el teorema del coseno:
Sean un triángulo cualquiera con vértices A, B, C, lados a, b, c y ángulos A, B y C respectivamente.

…….C…
……./\….
….b/..\.a
…../….\..
…A..c..B

Entonces el teorema del coseno dice:

a² = b² + c² – 2bc*cos(A)
Luego cos(A) = (b² + c² – a²)/2bc

Puedes aplicar esto para todos los ángulos, así que te resulta lo siguiente:

cos(A) = (b² + c² – a²)/2bc
cos(B) = ( a² + c² -b²)/2ac
cos(C) = ( a² + b² – c²)/2ab

Luego los ángulos se calculan como:

A = arc cos[(b² + c² – a²)/2bc]
B = arc cos[(a² + c² -b²)/2ac]
C = arc cos[(a² + b² – c²)/2ab]

donde arc cos es la función inversa de cos (o también conocida como acos)

En Processing, podemos introducir la librería Math de java para poder realizar este cálculo.

Hay que tener en cuenta que hay que el ángulo hay que transformarlo a radianes para hacer la operación de arcoseno.

import java.lang.Math.*;

Realicé el calculo para poder obtener el ángulo:

double calculaAngulo(float A,float b,float a){
   //A= arc cos[(b² + c² - a²)/2bc]
  int c=90;
  double angulo = Math.acos( (b * b + c * c - a * a) / (2 * b * c)) * 180 / Math.PI;
  println ("ANGULO en grados!!:  "+angulo);
  double anguloRadianes = Math.toRadians(angulo);
  println("convertir Deg a Rad: " +anguloRadianes + " rad");
  if(anguloRadianes>1) anguloRadianes=1;
  double valor = Math.acos(anguloRadianes);
  System.out.println("acos de " + anguloRadianes + "º = " + valor);
  double angGrados = Math.toDegrees(valor);
  println("real en angulo: Rad a Deg: " + angGrados) ;
  return angGrados;
  }

Pero después de esto, no conseguí jamás que la línea se me inclinara en un ángulo deseado, así que pasé a otra fase, esta fue generar una esfera en el punto derecho de la clavícula, e ir bajando o subiendo creando esferas hasta el punto izquierdo, y así para todas las articulaciones.

No fue tan sencillo como parecía. Pero finalmente conseguí hacer un bucle para el brazo derecho e clavícula. Pero el resultado no fue muy bueno, así que lo descartamos por ahora.

Etiquetas: , , , , , , , ,

About Miriam Esteve

Ingeniera & creativa. Amiga de mis amigos. Me gustan las cosas bonitas, el diseño, el video y la fotografía, cocinar, reír y disfrutar de la vida! Spain&Germany www.control-art.com

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: