Я изучаю искусственный интеллект в качестве модуля на курсе по программированию компьютерных игр, и одна из моих задач - это кодирование эффективного поведения, направленного на предотвращение препятствий.Я использовал Matt Bucklands Programming AI для примера, чтобы помочь мне, но основа, которую я использую, существенно отличается.Вместо того, чтобы использовать окно обнаружения, я должен использовать щупы, чтобы он был ближе к функции «Устранение стены», чем «Предотвращение препятствий».У меня есть функция PointInBox вместо функции LineIntersection, которая принимает Vector2D (щупальца) и Rect2D (препятствия).Код перебирает размер препятствия и обнаруживает, есть ли столкновение в этой точке.
После обнаружения столкновения рассчитывается усилие рулевого управления, чтобы оттолкнуть агента от препятствия
У меня проблема в том, что я не знаю, использую ли я правильные переменные впараметры PointInBox, и я не могу рассчитать усилие рулевого управления, потому что я не знаю, как эффективно использовать структуру Rect2D.
Я пробовал прикреплять различные значения к переменной Rect2D «препятствия», но мне нужночтобы получить ClosestObstacle и нормализовать его вокруг Rect2D (я действительно не знаю, как выразить словами, в чем моя проблема, я ограничиваю начинающего / промежуточного, когда дело доходит до кодирования).
Vector2D w019435fSteeringBehaviours::ObstacleAvoidance(Rect2D obstacles)
{
CreateFeelers();
double DistToThisIP = 0.0;
double DistToClosestIP = MaxDouble;
ObstacleManager* Obstacle;
int ClosestObstacle = -1;
Vector2D SteeringForce, Point, ClosestPoint;
for (unsigned int flr = 0; flr < feelers.size(); ++flr)
{
for (unsigned int o = 0; o < Obstacle->GetObstacles().size(); ++o)
{
if(PointInBox(feelers[flr], obstacles))
{
if (DistToThisIP < DistToClosestIP)
{
DistToClosestIP = DistToThisIP;
ClosestObstacle = o;
ClosestPoint = Point;
}
}
}
if (ClosestObstacle >= 0)
{
Vector2D Projection = feelers[flr] - ClosestPoint;
SteeringForce = obstacles.normal * Projection.Length();
}
}
return SteeringForce;
}
ClosestObstacleЯ думаю, что это очень важно и должно быть элементом препятствий, которые затем нормализуются и умножаются на длину проекции.Но я не могу прикрепить участников к препятствиям.
Любая помощь будет принята с благодарностью, спасибо.