本文整理汇总了C++中Maze::getHCurrentSize方法的典型用法代码示例。如果您正苦于以下问题:C++ Maze::getHCurrentSize方法的具体用法?C++ Maze::getHCurrentSize怎么用?C++ Maze::getHCurrentSize使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Maze
的用法示例。
在下文中一共展示了Maze::getHCurrentSize方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getDistanceToClosestWall
float Particle::getDistanceToClosestWall(Maze const &maze, float offsetX, float offsetY, float offsetTheta)
{
VerticalWall* verticalWalls = maze._vertWalls;
HorizontalWall* horizontalWalls = maze._horizWalls;
int i;
float minDistance, delX, delY;
float effectiveTheta = angleMod(_theta + offsetTheta);
float effectiveX = _x + (cos(_theta)*offsetX - sin(_theta)*offsetY);
float effectiveY = _y + (sin(_theta)*offsetX + cos(_theta)*offsetY);
int verticalSplitIndex = maze.splitVerticalWallsOn(effectiveX); //all vertical walls with x>this are to the right of the particle and vice versa
int horizontalSplitIndex = maze.splitHorizontalWallsOn(effectiveY); //all horizontal walls with y>this are above the particle and vice versa
if (effectiveTheta >= 0 && effectiveTheta < M_Pi/2.0)
{
for (i = verticalSplitIndex; i < maze.getVCurrentSize(); i++) //1st quadrant
{
delX = verticalWalls[i].getx1()-effectiveX; delY = delX*tan(effectiveTheta);
if (checkVerticalWall(verticalWalls[i], effectiveY+delY)) { minDistance = sqrt(delX*delX + delY*delY); break; }
}
for (i = horizontalSplitIndex; i < maze.getHCurrentSize(); i++)
{
delY = horizontalWalls[i].gety1()-effectiveY; delX = delY/tan(effectiveTheta);
if (checkHorizontalWall(horizontalWalls[i], effectiveX+delX)) { minDistance = fmin(minDistance, sqrt(delX*delX + delY*delY)); break; }
}
}
else if (effectiveTheta >= M_Pi/2.0 && effectiveTheta < M_Pi) //2nd quadrant
{
for (i = verticalSplitIndex - 1; i >= 0; i--)
{
delX = verticalWalls[i].getx1()-effectiveX; delY = delX*tan(effectiveTheta);
if (checkVerticalWall(verticalWalls[i], effectiveY+delY)) { minDistance = sqrt(delX*delX + delY*delY); break; }
}
for (i = horizontalSplitIndex; i < maze.getHCurrentSize(); i++)
{
delY = horizontalWalls[i].gety1()-effectiveY; delX = delY/tan(effectiveTheta);
if (checkHorizontalWall(horizontalWalls[i], effectiveX+delX)) { minDistance = fmin(minDistance, sqrt(delX*delX + delY*delY)); break; }
}
}
else if (effectiveTheta >= M_Pi && effectiveTheta < 3*M_Pi/2.0) //3rd quadrant
{
for (i = verticalSplitIndex - 1; i >= 0; i--)
{
delX = verticalWalls[i].getx1()-effectiveX; delY = delX*tan(effectiveTheta);
if (checkVerticalWall(verticalWalls[i], effectiveY+delY)) { minDistance = sqrt(delX*delX + delY*delY); break; }
}
for (i = horizontalSplitIndex - 1; i >= 0; i--)
{
delY = horizontalWalls[i].gety1()-effectiveY; delX = delY/tan(effectiveTheta);
if (checkHorizontalWall(horizontalWalls[i], effectiveX+delX)) { minDistance = fmin(minDistance, sqrt(delX*delX + delY*delY)); break; }
}
}
else //4th quadrant
{
for (i = verticalSplitIndex; i < maze.getVCurrentSize(); i++) //1st quadrant
{
delX = verticalWalls[i].getx1()-effectiveX; delY = delX*tan(effectiveTheta);
if (checkVerticalWall(verticalWalls[i], effectiveY+delY)) { minDistance = sqrt(delX*delX + delY*delY); break; }
}
for (i = horizontalSplitIndex - 1; i >= 0; i--)
{
delY = horizontalWalls[i].gety1()-effectiveY; delX = delY/tan(effectiveTheta);
if (checkHorizontalWall(horizontalWalls[i], effectiveX+delX)) { minDistance = fmin(minDistance, sqrt(delX*delX + delY*delY)); break; }
}
}
return minDistance;
}