空间两向量之间的旋转角如何求?角度范围在0-360°
已知两三维空间向量,求从一向量逆时针旋转至另一向量的旋转角,该角度范围在0-360°,
(1)利用公式求的两向量的夹角
(2)根据叉乘判断旋转方向即可
平面上三个点:
p1(x1,y1) –>顶点 ,
p2(x2,y2) –>顶点 ,
p3(x3,y3) –>原点,
s(p1,p2,p3)=(x1-x3)*(y2-y3)-(x2-x3)*(y1-y3)
如果s>0 则说明 这连接这3个点时是按照逆时针的顺序,如果是s<0则说明连接这3个点是按照顺时针的顺序
二维矢量叉积
设矢量P = (x1,y1) ,Q = (x2,y2)
则矢量叉积定义为: P × Q = x1*y2 - x2*y1 得到的是一个标量,是所组成的平行四边形带符号的面积。
显然有性质 P × Q = - ( Q × P ) P × ( - Q ) = - ( P × Q )
如不加说明,下面所有的点都看作矢量,点的乘法看作矢量叉积;
叉乘的重要性质:
> 若 P × Q > 0 , 则P 在Q的顺时针方向
> 若 P × Q < 0 , 则P 在Q的逆时针方向
> 若 P × Q = 0 , 则P 与Q共线,但可能同向也可能反向
(1)二维矢量
就像点积与角度的余弦成正比一样,行列式与其正弦成正比。所以你可以像这样计算角度:
dot = x1*x2 + y1*y2 # dot product between [x1, y1] and [x2, y2]det = x1*y2 - y1*x2 # determinantangle = atan2(det, dot) # atan2(y, x) or atan2(sin, cos)
该角度的方向与坐标系的方向匹配。在左手坐标系中,即x指向右和y向下是计算机图形常见的,这意味着你得到顺时针角度的正号。如果坐标系的方向是数学的y向上,则得到逆时针角度,就像数学中的惯例一样。更改输入的顺序将改变符号,因此如果您对符号不满意,只需交换输入。
atan2 比 atan 稳定。
在数学坐标系中,atan2 结果为正表示从 X 轴逆时针旋转的角度,结果为负表示从 X 轴顺时针旋转的角度。
(2)三维矢量
在3D中,两个任意放置的矢量定义它们自己的旋转轴,垂直于两者。该旋转轴没有固定方向,这意味着您无法唯一地固定旋转方向。一个常见的惯例是让角度始终为正,并使轴线以适合正角度的方式定向。在这种情况下,归一化矢量的点积足以计算角度。
dot = x1*x2 + y1*y2 + z1*z2 #between [x1, y1, z1] and [x2, y2, z2]lenSq1 = x1*x1 + y1*y1 + z1*z1
lenSq2 = x2*x2 + y2*y2 + z2*z2
angle = acos(dot/sqrt(lenSq1 * lenSq2))
网友评论