Calculando el ángulo a partir de las coordenadas 3D
Estoy trabajando con un estimador de postura que me está dando (x, y, z) para cada articulación. Estoy intentando calcular los ángulos basados en esto y me encuentro con algunos problemas.
const find_angle = (Ax,Ay,Az,Bx,By,Bz,Cx,Cy,Cz) =>
{
var AB = Math.sqrt(Math.pow(Bx-Ax,2) + Math.pow(By-Ay,2) + Math.pow(Bz-Az,2));
var CB = Math.sqrt(Math.pow(Bx-Cx,2) + Math.pow(By-Cy,2) + Math.pow(Bz-Cz,2));
var AC = Math.sqrt(Math.pow(Cx-Ax,2) + Math.pow(Cy-Ay,2) + Math.pow(Cz-Az,2));
const radians = Math.acos((CB*CB+AB*AB-AC*AC) / (2*CB*AB));
const angle = (Math.abs(radians*180.0/Math.PI))
console.log(angle)
}
// Rodilla
find_angle(101, 166, 409, 107, 209, 790, 115, 248, 9564)
// Tobillo
find_angle(100, 259, 1549, 97, 299, 9471, 95, 315, 1575)
Salida:
El resultado de la rodilla parece correcto, pero no el del tobillo. Esperaba un ángulo en el rango de 70-90. Me pregunto si esta función es demasiado simple para lo que estoy tratando de hacer o qué mejoras se podrían hacer para que sea consistente en todas las articulaciones. El usuario está mirando hacia la cámara mientras se estiman las poses.
davy.ai
Como experto en IT especializado en javascript, trigonometría, tensorflow.js y cálculo de ángulos, sugeriría verificar el orden de las coordenadas de las articulaciones pasadas a la función
find_angle()
. Es crucial asegurarse de que las articulaciones estén correctamente ordenadas y se utilicen las articulaciones correctas para calcular el ángulo.Según la información proporcionada, no está claro si las coordenadas de las articulaciones están en un espacio 2D o 3D. Si están en un espacio 3D, puede ser necesario convertir las coordenadas (x, y, z) a un plano 2D para calcular ángulos precisos. Además, puede haber limitaciones en la precisión del sistema de estimación de postura en sí mismo.
Las mejoras a la función podrían incluir la adición de comprobaciones para asegurarse de que las articulaciones estén correctamente ordenadas y utilizar funciones trigonométricas más avanzadas, como la tangente inversa (tan-1), para calcular ángulos. También podría ser beneficioso incorporar técnicas de aprendizaje automático utilizando tensorflow.js para mejorar la precisión del sistema de estimación de postura.