【发布时间】:2010-11-03 13:37:19
【问题描述】:
我在二维空间中有两个点,以原点 (0,0) 为中心。第一个点表示起始位置,第二个表示结束位置。我需要计算两点之间的旋转角度,我的问题是每个点到(0,0)的斜边不相等。
谁能告诉我如何计算出两点之间的角度,记住它们可以是相对于 (0,0) 的任何位置。
非常感谢,
马特。
【问题讨论】:
我在二维空间中有两个点,以原点 (0,0) 为中心。第一个点表示起始位置,第二个表示结束位置。我需要计算两点之间的旋转角度,我的问题是每个点到(0,0)的斜边不相等。
谁能告诉我如何计算出两点之间的角度,记住它们可以是相对于 (0,0) 的任何位置。
非常感谢,
马特。
【问题讨论】:
假设点 1 是 (x1,y1),点 2 是 (x2,y2)
从X轴到点1的角度的切线,相对于(0,0)是y1/x1
从X轴到点2的角度的切线,相对于(0,0)是y2/x2
取反正切(这是正确的术语吗?计算器上的 Tan-1)得到每个角度的实际角度,然后减去得到你正在寻找的答案
【讨论】:
acos。)
atan2(如果您的语言/库中有它),因为当您有垂直时它不会遇到问题。普通的旧 atan 在域中有无穷大,这可能很尴尬……
这很容易实现,取两个向量的归一化 inner product 的反余弦值。也就是说,给定 u = (ux, uy) 和 v = (vx , vy),两者的夹角由θ = acos(u·v/|给出u||v|),其中 u · v = uxv x + uyvy 是两者的点积和 | |运算符是由 |u| 给出的 l2 法线。 = sqrt(ux2 + uy2)。这将导致可以应用于其中一个向量的最小旋转,这将使它们成为彼此的线性倍数。因此,您可能需要摆弄 θ 的符号,以确保如果您想从一个方向开始,您会朝着正确的方向前进。
【讨论】: