优化c ++代码中的循环

时间:2014-05-12 07:55:21

标签: c++ optimization

Integer Range = 1;
for(Integer k = -Range; k <= Range; ++k)
{
    for(Integer j = -Range; j <= Range; ++j)
    {
        for(Integer i = -Range; i <= Range; ++i)
        {
            Integer MCID = GetCellID(&CONSTANT_BOUNDINGBOX,CIDX +i, CIDY + j,CIDZ
                                     + k);
            if(MCID < 0 || MCID >= c_CellNum)
            {
                continue;
            }
            unsigned int TriangleNum = c_daCell[MCID].m_TriangleNum;
            for(unsigned int l = 0; l < TriangleNum; ++l)
            {
                TriangleID=c_daCell[MCID].m_TriangleID[l];
                if( TriangleID >= 0 && TriangleID < c_TriangleNum && TriangleID
                        != NearestID)// No need to calculate again for the same triangle
                {
                    CDistance Distance ;
                    Distance.Magnitude = CalcDistance(&c_daTriangles[TriangleID], &TargetPosition,
                                                      &Distance.Direction);
                    if(Distance.Magnitude < NearestDistance.Magnitude)
                    {
                        NearestDistance = Distance;
                        NearestID = TriangleID;
                    }
                }
            }
        }
    }
}
}
c_daSTLDistance[ID] = NearestDistance;
c_daSTLID[ID] = NearestID;

GetCellID是使用CIDX,CIDY,CIDZ及其在3轴中的位置返回变量CID中的cellid的函数

这里上面的代码是计算距离的函数,实际上是一个点和stl的三角形之间的STL距离。这段代码运行正常,但问题是它太慢,因为它在代码中有大量的循环。现在我关心的是优化循环。是否有任何优化代码中循环的技术?

0 个答案:

没有答案