向量之间的二维角度。负向上和向右?
2D angle between vectors. Negative for up and right?
我正在研究一些二维数学,我发现 up(0, 1)
和 right(1, 0)
之间的角度是 -90
,除非我疯了或者在这里遗漏了一些东西,似乎是错误的。我希望 +90
。我希望这里有人能帮我检查一下。
这是我正在使用的实现:
GetAngle(a, b) = atan2(Cross(a, b), Dot(a, b))
其中:
Cross(a, b) = (a.x * b.y) - (a.y * b.x)
Dot(a, b) = (a.x * b.x) + (a.y * b.y)
根据右手法则应该是-90度。根据您的计算:
a = (0, 1)
b = (1, 0)
Cross(a,b) = 0 * 0 - 1 * 1 = -1 = sin(angle)
Dot(a,b) = 0 * 1 + 1 * 0 = 0 = cos(angle)
因此,
GetAngle(a,b) = atan2(-1, 0) = -90 degrees
请注意 atan2(y,x)
是 tan^-1(y/x)
。 GetAngle
的公式基于以下事实:叉积定义为 a X b = ||a||||b||sin(angle between a and b)
,点积定义为 a . b = ||a||||b||cos(angle between a and b)
希望这对您有所帮助。
我知道这是一个老问题但是:
要计算两个向量之间的角度,使符号告诉您另一个向量是在右边还是左边(即负数表示它在左边,正数表示它在右边),您可以计算两个 atan2
之间的差异,然后像这样更正它们:
def angleVec2(d, v):
a_1 = math.atan2(d[1], d[0])
a_2 = math.atan2(v[1], v[0])
diff = a_2 - a_1
if diff < -math.pi:
diff = math.pi-(abs(diff)-math.pi)
elif diff > math.pi:
diff = -math.pi+(abs(diff)-math.pi)
return diff
我正在研究一些二维数学,我发现 up(0, 1)
和 right(1, 0)
之间的角度是 -90
,除非我疯了或者在这里遗漏了一些东西,似乎是错误的。我希望 +90
。我希望这里有人能帮我检查一下。
这是我正在使用的实现:
GetAngle(a, b) = atan2(Cross(a, b), Dot(a, b))
其中:
Cross(a, b) = (a.x * b.y) - (a.y * b.x)
Dot(a, b) = (a.x * b.x) + (a.y * b.y)
根据右手法则应该是-90度。根据您的计算:
a = (0, 1)
b = (1, 0)
Cross(a,b) = 0 * 0 - 1 * 1 = -1 = sin(angle)
Dot(a,b) = 0 * 1 + 1 * 0 = 0 = cos(angle)
因此,
GetAngle(a,b) = atan2(-1, 0) = -90 degrees
请注意 atan2(y,x)
是 tan^-1(y/x)
。 GetAngle
的公式基于以下事实:叉积定义为 a X b = ||a||||b||sin(angle between a and b)
,点积定义为 a . b = ||a||||b||cos(angle between a and b)
希望这对您有所帮助。
我知道这是一个老问题但是:
要计算两个向量之间的角度,使符号告诉您另一个向量是在右边还是左边(即负数表示它在左边,正数表示它在右边),您可以计算两个 atan2
之间的差异,然后像这样更正它们:
def angleVec2(d, v):
a_1 = math.atan2(d[1], d[0])
a_2 = math.atan2(v[1], v[0])
diff = a_2 - a_1
if diff < -math.pi:
diff = math.pi-(abs(diff)-math.pi)
elif diff > math.pi:
diff = -math.pi+(abs(diff)-math.pi)
return diff