コード例 #1
0
ファイル: AStarNode.c プロジェクト: manojcrisdo/RoboLab
void setAllInfoAStarNode(aStarNode* f_inputAStarNode_pst, node* f_inputInfoNode_pst,
						 aStarNode* f_inputCameFromNode_pst, int32 f_inputGscore_i32,
						 int32 f_inputHscore_i32)
{
	setInformationPtr(f_inputAStarNode_pst, f_inputInfoNode_pst);
	setCameFromPtr(f_inputAStarNode_pst, f_inputCameFromNode_pst);
	setGScore(f_inputAStarNode_pst, f_inputGscore_i32);
	setHScore(f_inputAStarNode_pst, f_inputHscore_i32);
	setFScore(f_inputAStarNode_pst, f_inputGscore_i32, f_inputHscore_i32);
}
コード例 #2
0
void ComputePath::getPath( Point from,Point to )
{
	insertInOpenSteps(ShortestPathStep::createFromPos(from));
    do 
    {
		auto currentStep = spOpenSteps.at(0);
		spClosedSteps.pushBack(currentStep);
		spOpenSteps.erase(0);
		if (currentStep->getPos() == to)
		{
			constructPath(currentStep);
			spOpenSteps.clear();
			spClosedSteps.clear();
			break;
		}
		auto points = _layer->getValidStep(currentStep->getPos());				
		for (int i = 0 ; i < points->count(); i++)
		{
			auto v = points->getControlPointAtIndex(i);
			auto step = ShortestPathStep::createFromPos(v);
			int closeindex = -1;
			for (int i = 0 ; i < spClosedSteps.size();i++ )
			{
				if (spClosedSteps.at(i)->isEqual(step))
				{
					closeindex = i;
					break;
				}
			}
			if (closeindex != -1)
			{
				continue;
			}
			auto moveCost = this->costToMoveFromStep(currentStep,step);
			int index = -1;
			for (int i = 0; i < spOpenSteps.size();i++)
			{
				auto item = spOpenSteps.at(i);
				if (step->isEqual(item))
				{
					index = i;
					break;
				}
			}
			if (index == -1)
			{
				step->setParent(currentStep);
				step->setGScore(currentStep->getGScore() + moveCost);
				step->setHScore(this->computeHScoreFromCoord(step->getPos(),to));
				this->insertInOpenSteps(step);
			}
			else
			{   
				step = this->spOpenSteps.at(index);
				if (currentStep->getGScore() + moveCost < step->getGScore())
				{
					step->setGScore(currentStep->getGScore() + moveCost);
					step->retain();
					spOpenSteps.erase(index);
					this->insertInOpenSteps(step);
					step->release();
				}

			}

              
		}

    } while (spOpenSteps.size() > 0);
    
}