美文网首页
空间两向量之间的旋转角如何求?角度范围在0-360°

空间两向量之间的旋转角如何求?角度范围在0-360°

作者: 潭潭_180 | 来源:发表于2018-09-10 14:28 被阅读0次

    空间两向量之间的旋转角如何求?角度范围在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))

    相关文章

      网友评论

          本文标题:空间两向量之间的旋转角如何求?角度范围在0-360°

          本文链接:https://www.haomeiwen.com/subject/odtckftx.html