【发布时间】:2016-08-08 21:29:00
【问题描述】:
我使用 math.acos() 来计算两个向量之间的角度。思路是计算两个归一化向量的点积,用点积的arccos返回两个向量的夹角(0到pi范围内)。
有时这两个向量在归一化时具有相同的方向,它们的点积应该为 1。但是,由于数值错误,它实际上是 0.999999999998,... 或者有时是 1.0000000000002。后者以错误 ValueError: math domain error
我无意中发现这个question 询问类似的问题,但已关闭。在这里我重新询问,希望对如何避免此类错误有更好的了解。
就我而言,在进行点生成和 arccos 之前,我必须检查两个向量是否具有相同的方向。这有帮助,但我仍然想知道是否有更好的方法来做到这一点。
【问题讨论】:
-
数字偏移量非常小,这是大多数编程语言中浮点数存储方式的结果(IEEE标准,它基于数字的对数)。您应该简单地四舍五入到您认为与可接受误差范围内的角度相对应的某个水平,例如 10^-10。或者写一行
if math.abs(result-1)<1e-10: ...