求向量之间的符号角

发布于 2024-08-19 17:54:35 字数 286 浏览 6 评论 0原文

你如何找到从向量 a 到 b 的符号角 theta?

是的,我知道 theta = arccos((ab)/(|a||b|))。

然而,它不包含符号(即它不区分顺时针或逆时针旋转)。

我需要一些可以告诉我从 a 到 b 旋转的最小角度的东西。正号表示从 +x 轴向 +y 轴旋转。相反,负号表示从+x轴向-y轴旋转。

assert angle((1,0),(0,1)) == pi/2.
assert angle((0,1),(1,0)) == -pi/2.

How would you find the signed angle theta from vector a to b?

And yes, I know that theta = arccos((a.b)/(|a||b|)).

However, this does not contain a sign (i.e. it doesn't distinguish between a clockwise or counterclockwise rotation).

I need something that can tell me the minimum angle to rotate from a to b. A positive sign indicates a rotation from +x-axis towards +y-axis. Conversely, a negative sign indicates a rotation from +x-axis towards -y-axis.

assert angle((1,0),(0,1)) == pi/2.
assert angle((0,1),(1,0)) == -pi/2.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

满栀 2024-08-26 17:54:35

你想要使用的通常被称为“perp点积”,即找到垂直于其中一个向量的向量,然后找到与另一个向量的点积。

if(a.x*b.y - a.y*b.x < 0)
    angle = -angle;

您还可以这样做:

angle = atan2( a.x*b.y - a.y*b.x, a.x*b.x + a.y*b.y );

What you want to use is often called the “perp dot product”, that is, find the vector perpendicular to one of the vectors, and then find the dot product with the other vector.

if(a.x*b.y - a.y*b.x < 0)
    angle = -angle;

You can also do this:

angle = atan2( a.x*b.y - a.y*b.x, a.x*b.x + a.y*b.y );
夜无邪 2024-08-26 17:54:35

如果您选择的数学库中有 atan2() 函数:

signed_angle = atan2(b.y,b.x) - atan2(a.y,a.x)

If you have an atan2() function in your math library of choice:

signed_angle = atan2(b.y,b.x) - atan2(a.y,a.x)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文