在我正在制作的游戏中,我有两个点,pt1 和 pt2,我想计算出它们之间的角度。我已经在较早的计算中计算出距离。显而易见的方法是对垂直距离上的水平距离进行反正切 (tan(theta) = opp/adj)。
我想知道,因为我已经计算了距离,使用带有距离和 dx 或 dy 的反正弦/反余弦会更快吗?
另外,我最好在表格中预先计算吗?
最佳答案
除了所有关于过早优化的明智评论,让我们假设这是热点并做一个 frigg'n benchmark :
时间以纳秒为单位,缩放以标准化系统之间的“acos”。
'acos' 只是假设单位半径,即 acos(adj)
, 而 'acos+div' 表示 acos(adj/hyp)
.
系统 1 是运行 Mac OS X 10.6.4 (gcc 4.2.1) 的 2.4GHz i5
系统 2 是运行 Red Hat 7 Linux 2.6.28 (gcc 4.1.2) 的 2.83GHz Core2 Quad
系统 3 是运行 Ubuntu 10.04 2.6.32 (gcc 4.4.3) 的 1.66GHz Atom N280
系统 4 是运行 Ubuntu 10.04 2.6.32 (gcc 4.4.3) 的 2.40GHz Pentium 4
总结:相对性能无处不在。有时 atan2 更快,有时更慢。非常奇怪的是,在某些系统上,使用除法执行 acos 比没有执行更快。在您自己的系统上测试:-/
关于performance - 三角函数的效率/速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/769836/