使用这两种算法有什么区别。我一直想知道应该如何优化事物,它们如何在内存和速度方面有所不同?这个比那个好吗?除了代码清晰之外,我的意思是。
这是我的第一个版本:
bool Intersects(BoundingSphere boundingSphere)
{
D3DXVECTOR3 vectorBetween = (centre - boundingSphere.centre);
// works out the distance between the sphere centre's using pythag
float distance = sqrt(
pow(vectorBetween.x, 2)
+ pow(vectorBetween.y, 2)
+ pow(vectorBetween.z, 2));
// if two radius's add to more than the distance between the centres
return (radius + boundingSphere.radius > distance);
}
此方法是相同的,但是它不保存变量中的任何值,只使用一个长计算
bool Intersects(BoundingSphere boundingSphere)
{
return (radius + boundingSphere.radius >
(sqrt(pow((centre - boundingSphere.centre).x, 2) +
pow((centre - boundingSphere.centre).y, 2) +
pow((centre - boundingSphere.centre).z, 2))));
}
最佳答案
在适当的优化选项下,这两种算法将编译为完全相同的代码。由于第一个更具可读性,因此无疑两者之间更好。
优化此代码的正确方法不是摆脱变量(编译器可以为您完成此操作),而是摆脱sqrt操作:只需比较平方距离即可。