C ++ Как вычислить дугу между двумя трехмерными точками

Я прочитал форум и, как я уверен, этот вопрос задавался ранее, но я не мог найти то, что искал.

Моя проблема заключается в следующем:

У меня есть AI-персонаж, движущийся вдоль сплайна. Если этот путь заблокирован, персонаж должен двигаться по дуге вокруг него, а затем продолжать свой путь.

Для аргументов предположим, что сплайн имеет длину 7000 единиц.

Поэтому у меня есть два 3D (x, y, z) вектора. Первый вектор — это текущая позиция AI-бота, а второй — позиция за препятствием. Пока просто скажем: текущая позиция сплайна + 400 единиц; позже я мог сделать трассировку линии, чтобы получить размер препятствия и т. д., но сейчас я не забочусь об этом.

Теперь я хотел бы рассчитать альтернативный путь, чтобы избежать вышеупомянутого препятствия — следовательно, вычислить дугу между этими двумя точками — Как мне это сделать?
Я действительно ужасно разбираюсь в математике, но смотрел на траекторию снаряда, потому что думал, что это будет примерно то же самое, просто не мог по-настоящему понять это:<

0

Решение

Это не должно быть дугой. Вы можете решить эту проблему рекурсивно очень простым способом.

Предположим, что вы находитесь в положении A, а препятствие — в положении B. Вы можете сделать следующие шаги:

  • Из текущей позиции в A+V(B[x]+height(B),0,0)
  • Из текущей позиции в A+V(0,B[y]+width(B),0)
  • Из текущей позиции в A+V(B[x]-height(B),0,0)

где V — вектор с компонентами V (x, y, z), width (B) — ширина препятствия, а B [x] — компонент x позиции B. Таким образом, вы перемещаетесь по прямоугольнику , Теперь вы можете сгладить путь, разделив этот прямоугольник пополам. 3 подразделения достаточно, чтобы сделать это достаточно гладко. Чтобы подразделить, возьмите среднюю точку первого пути и нарисуйте линию к середине второго пути. То же самое вы делаете со второго пути на третий, и теперь ваш прямоугольник становится восьмиугольником. Если это не достаточно гладко, сделайте еще несколько шагов. Это создаст новый сплайн, который вы можете использовать.

0

Другие решения

Я бы посмотрел на комбинацию сплайнов и системы EQS. Сплайн определяет идеальный путь для подражания. Система EQS находит места рядом или на пути, все еще избегая препятствий. EQS может вернуть все действительные пункты назначения, чтобы вы могли вручную заказать их по специальному критерию.

Актеры, установленные на сплайне, работают, но есть много проблем, когда они останавливаются после сплайна, создают новый в правильной точке, прикрепляют актера к новому сплайну и так далее.

0

Вчера я пришел к такому выводу после того, как пошёл по грязному пути добавления точек сплайна и т. Д. Единственная проблема, которую я вижу, состоит в том, что мне очень трудно понять систему EQS. Не следуя примерам как таковым, но модифицируя их так, как мне нужно. Давайте посмотрим, я буду держать вас в курсе.

0
По вопросам рекламы [email protected]