使用这两种算法有什么区别。我一直想知道应该如何优化事物,它们如何在内存和速度方面有所不同?这个比那个好吗?除了代码清晰之外,我的意思是。

这是我的第一个版本:

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操作:只需比较平方距离即可。

08-05 06:14