2
向量之间的角度数值稳定计算方法
当对两个向量之间的角度应用经典公式时: α=arccosv1⋅v2∥v1∥∥v2∥α=arccosv1⋅v2‖v1‖‖v2‖\alpha = \arccos \frac{\mathbf{v_1} \cdot \mathbf{v_2}}{\|\mathbf{v_1}\| \|\mathbf{v_2}\|} 人们发现,对于非常小的/锐角,会损失精度,结果也不准确。正如在解释这个堆栈溢出的答案,一个解决方案是使用反正切来代替: α=arctan2(∥v1×v2∥,v1⋅v2)α=arctan2(‖v1×v2‖,v1⋅v2)\alpha = \arctan2 \left(\|\mathbf{v_1} \times \mathbf{v_2}\|, \mathbf{v_1} \cdot \mathbf{v_2} \right) 这确实提供了更好的结果。但是,我想知道这是否会给非常接近\ pi / 2的角度带来不好的结果π/2π/2\pi / 2。是这样吗 如果是这样,是否有任何公式可以精确计算角度而无需检查if分支内的公差?