gpt4 book ai didi

math - 没有引用平面的两个向量之间的有符号角

转载 作者:行者123 更新时间:2023-12-04 00:36:13 25 4
gpt4 key购买 nike

(在三个维度中)我正在寻找一种方法来计算两个向量之间的带符号角,除了这些向量之外没有其他信息。如 this question 中的回答,给定向量垂直于平面的法线,计算带符号角很简单。但是如果没有那个值(value),我就找不到办法做到这一点。很明显,两个向量的叉积会产生这样的法线,但我使用上面的答案遇到了以下矛盾:

signed_angle(x_dir, y_dir) == 90
signed_angle(y_dir, x_dir) == 90

我希望第二个结果是否定的。这是因为叉积 cross(x_dir, y_dir)cross(y_dir, x_dir) 方向相反,给定以下带有标准化输入的伪代码:
signed_angle(Va, Vb)
magnitude = acos(dot(Va, Vb))
axis = cross(Va, Vb)
dir = dot(Vb, cross(axis, Va))
if dir < 0 then
magnitude = -magnitude
endif
return magnitude

我不相信 dir 上面永远不会是负数。

我在建议的 atan2 解决方案中看到了同样的问题。

我正在寻找一种方法来制作:
signed_angle(a, b) == -signed_angle(b, a)

最佳答案

相关数学公式:

  dot_product(a,b) == length(a) * length(b) * cos(angle)
length(cross_product(a,b)) == length(a) * length(b) * sin(angle)

对于 3-D 向量之间的稳健角度,您的实际计算应该是:
  s = length(cross_product(a,b))
c = dot_product(a,b)
angle = atan2(s, c)

如果您使用 acos(c)单独来说,当角度很小的时候,你会遇到严重的精度问题。计算 s并使用 atan2()为您提供所有可能情况下的稳健结果。

s总是非负的,产生的角度范围从 0 到 pi。总会有一个等效的负角 (angle - 2*pi) ,但没有几何原因更喜欢它。

关于math - 没有引用平面的两个向量之间的有符号角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10133957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com