当前位置: 首页>>代码示例>>C++>>正文


C++ Maze::getHCurrentSize方法代码示例

本文整理汇总了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;
}
开发者ID:svatasoiu,项目名称:arduino,代码行数:74,代码来源:Particle.cpp


注:本文中的Maze::getHCurrentSize方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。