Alternatif bir yaklaşım öneriyorum: Hızla keşfedilen rastgele ağaç (RRT) . Bununla ilgili güzel bir şey, köşelerde dolaşma ya da her yöne patlayabilmeniz.
Algoritma gerçekten çok basit:
// Returns a random tree containing the start and the goal.
// Grows the tree for a maximum number of iterations.
Tree RRT(Node start, Node goal, int maxIters)
{
// Initialize a tree with a root as the start node.
Tree t = new Tree();
t.Root = start;
bool reachedGoal = false;
int iter = 0;
// Keep growing the tree until it contains the goal and we've
// grown for the required number of iterations.
while (!reachedGoal || iter < maxIters)
{
// Get a random node somewhere near the goal
Node random = RandomSample(goal);
// Get the closest node in the tree to the sample.
Node closest = t.GetClosestNode(random);
// Create a new node between the closest node and the sample.
Node extension = ExtendToward(closest, random);
// If we managed to create a new node, add it to the tree.
if (extension)
{
closest.AddChild(extension);
// If we haven't yet reached the goal, and the new node
// is very near the goal, add the goal to the tree.
if(!reachedGoal && extension.IsNear(goal))
{
extension.AddChild(goal);
reachedGoal = true;
}
}
iter++;
}
return t;
}
RandomSample
Ve ExtendToward
işlevlerini değiştirerek, çok farklı ağaçlar elde edebilirsiniz. Her RandomSample
yerde eşit şekilde örneklenirse, ağaç her yöne eşit şekilde büyür. Hedefe yönelik önyargılı ise, ağaç hedefe doğru büyüme eğiliminde olacaktır. Her zaman hedefi hedeflerse, ağaç baştan hedefe doğru düz bir çizgi olacaktır.
ExtendToward
Ağaca da ilginç şeyler yapmanıza izin verebilir. Birincisi, eğer engelleriniz varsa (duvarlar gibi), ağacın etraflarında , duvarlarla çarpışan uzantıları reddederek büyümesini sağlayabilirsiniz.
Bu, örneklemeyi hedefe doğru yöneltmediğinizde görünen şey:
(kaynak: uiuc.edu )
Ve işte duvarlarda nasıl göründüğü
RRT'nin bazı harika özellikleri tamamlandığında:
- RRT kendini asla geçmeyecek
- RRT sonunda tüm alanı daha küçük ve daha küçük dallarla kaplar.
- Baştan hedefe giden yol tamamen rastgele ve tuhaf olabilir.