Движение тела по заданному пути с помощью силы

Откуда такое "неприязненное отношение" к движку?

Что он Вам сделал плохого? Кстати он легко доступен, можете сами посмотреть (и поформулировать). Ладно, попробуем иначе, расскажу как я сделал, а Вы покритикуете, укажете ошибки и.т.п.

Пусть мы "идеально" движемся по пути, никакие стены/помехи нам не мешают. В каждый момент времени t известна точка, координата на пути p0 = path(t). Для следующего шага симуляции имеем p1 = path(t + dt). Требуется найти вектор силы/ускорения который переместит объект из позиции p0 в p1 за время интервала dt. Направление ускорения известно (вектор p1 - p0), а длину считаем по формуле 8-го класса

S = a * dt * dt / 2

Где

S - длина вектора пути: length

a - длина искомого вектора ускорения

dt - шаг симуляции

Но есть еще и текущая скорость объекта v

C++Выделить код

1
2
3
4
5

Vec3 vec = path(t + dt) - path(t)
float S = length(vec);
float acclen = S  2 / (dt  dt)
Vec3 acceleration = vec  2 / (dt  dt) - v(t) / dt
Vec3 force = mass  acceleration

Теперь "реальный" случай, текущие позиция и скорость могут быть любыми. Ну текущая скорость не волнует - все равно ее гасим. А текущую позицию position(t) просто используем вместо path(t). Итого

Можно и просто словами: есть точка цели path(t + dt), прилагаем такую силу чтобы попасть в нее из текущей position(t) за время dt. Собсно этого ответа я и ждал (но не дождался). Ну и конечно клампы (отсечки). Я ввел 3 предельных значения - для ускорения, скорости и тормоза, юзер должен их задавать. Размазывать не будем - все очевидно

Прошу покритиковать/попинать. Какие минусы такого решения? Что здесь не будет работать? Что "безграмотно"?