尽管StefanM的解决方案是一种非常常见的解决方案,但它实际上计算成本很高,但最重要的是,当矢量很小和/或角度接近0或π时不正确 - 它实际上可能会产生略微负的角度,或稍微超过π.
因此,它给出了一种虚假的鲁棒感.我反而建议
theta = acos(min(1,max(-1, a(:).' * b(:) / norm(a) / norm(b) )));
Run Code Online (Sandbox Code Playgroud)
更稳健,更正确,在循环中运行时速度超过10倍,而且没有文档可以理解,因为它仍然主要与"经典"公式一致.
| 归档时间: |
|
| 查看次数: |
4617 次 |
| 最近记录: |