(en tres dimensiones) Estoy buscando una forma de calcular el ángulo entre dos vectores firmado, dado ninguna información distinta de esos vectores. Como se responde en this question, es bastante simple calcular el ángulo firmado dada la normalidad de un plano en el que los vectores son perpendiculares. Pero no puedo encontrar la forma de hacerlo sin ese valor. Es obvio que el producto vectorial de dos vectores produce una normal de este tipo, pero me he encontrado con la siguiente contradicción usando la respuesta anterior:ángulo entre dos vectores Firmado y sin un plano de referencia
signed_angle(x_dir, y_dir) == 90
signed_angle(y_dir, x_dir) == 90
donde yo esperaría que el segundo resultado sea negativo. Esto es debido al hecho de que el producto cruzado cross(x_dir, y_dir)
es en la dirección opuesta de cross(y_dir, x_dir)
, dada la siguiente psuedocode con entrada normalizada:
signed_angle(Va, Vb)
magnitude = acos(dot(Va, Vb))
axis = cross(Va, Vb)
dir = dot(Vb, cross(axis, Va))
if dir < 0 then
magnitude = -magnitude
endif
return magnitude
no creo dir será nunca negativo anteriormente.
que he visto el mismo problema con la solución sugerida atan2.
Busco una manera de hacer:
signed_angle(a, b) == -signed_angle(b, a)
no es esto: http://www.jtaylor1142001.net/calcjat/Solutions/VDotProduct/VDPTheta3D.htm ¿qué estás buscando? – Jack
El enlace del comentario anterior no funciona – ephere