Самая близкая точка на пути к точке, или: Дорогая цель, извините я скучал по Вам

Для 2D игры я продолжаю работать, я хотел бы выяснить, когда снаряд достигает своего самого близкого для указания на его цель.

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

Что хороший путь состоит в том, чтобы вычислить это?

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

5
задан justkevin 5 February 2010 в 20:21
поделиться

5 ответов

Следите за предыдущим расстоянием и в первый момент проверьте, чтобы расстояние начало увеличиваться.

if ((currentDistance==0) || (currentDistance > previousDistance)) Explode()

Это просто потому, что геометрия пути тривиальна (т.е. прямая линия), но работает отлично.

Это дает дополнительное преимущество, когда цель работает быстрее, чем вы описываете, при условии, что оба пути прямые (или, по крайней мере, слегка изогнутые).

Ограничение: размер шага должен быть небольшим по сравнению с «размером» взрыва, иначе это не сработает. В этом случае вам нужно будет предварительно вычислить следующее расстояние ...

2
ответ дан 13 December 2019 в 22:07
поделиться

Вычислить нормаль к пути, пересекающемуся с целью. Пересечение нормали и пути будет ближайшей точкой на пути к цели.

2
ответ дан 13 December 2019 в 22:07
поделиться

Минимальное расстояние между точкой и линией: (в сущности, к чему сводится проблема)

http: //local.wasp. uwa.edu.au/~pbourke/geometry/pointline/

Дополнительные справочные материалы в его разделе общей геометрии:

http://local.wasp.uwa.edu.au/~pbourke/geometry/

5
ответ дан 13 December 2019 в 22:07
поделиться

Похоже, ваш «снаряд» движется по прямой.

Простым для визуализации было преобразование вашей 2D-плоскости так, чтобы линия стала осью x. Это будет включать вращение на arctan (dy / dx).

Примените то же преобразование к рассматриваемой точке и получите координату y.

Если хотите, вы можете сделать это вручную и выяснить, но игровые API уже должны быть хорошо для этого приспособлены.

1
ответ дан 13 December 2019 в 22:07
поделиться

Вы можете просто использовать теорему Пифагора, которая использует формулу (a)2 + (b)2 = (c)2. Таким образом, ваше расстояние будет равно квадратному корню произведения. Вот хорошая статья о том, как это реализовать, используя точки на сетке.

http://www.mathwarehouse.com/algebra/distance_formula/

0
ответ дан 13 December 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: