Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Как повернуть объект вдоль пути его следования?

Классический вопрос с собеседования на позицию разработчика игр (GameDev)
ПрограммированиеМатематика+3
  · 2,1 K
Пишу код, интересуюсь наукой, консультирую  · 10 окт 2022
Разберем правильный ответ, потому что уже прошло достаточно много времени с того момента, как я задал этот вопрос. Честно, я очень удивлен, почему вопрос не вызвал интереса и не было ответа на него до сих пор. Как мне кажется, это чуть ли не самый любимый вопрос на собеседовании для сферы геймдева. Приступим!
Конечно, есть много инструментов для разработки и, за частую, уже есть готовые методы для реализации подобного, но на собеседовании, в первую очередь, будет интересно на сколько хорошо вы понимаете механику процесса с точки зрения математики. 
А математика процесса достаточно проста и мы сейчас в этом убедимся, особенно, если сделать несколько допущений. Для начала давайте все-таки за основу возьмем приложение-навигатор, мне кажется, очень привычный и показательный плацдарм для изучения процесса. 
А теперь сделаем допущение - перемещение будет дискретным. То есть разделим наше перемещение на точки, в которых должна появляться наша машина с правильным поворотом, вдоль пути. Допустим раз в секунду, у нас обновляется позиция при получении данных со спутника и машинка перепрыгивает с точки на точку. На самом деле именно так и происходит в реальном приложении, только добавлена плавность (реализацию думаю тоже рассмотрим потом, в другом вопросе, опять же именно математику, а не использование популярных твиннеров).
Теперь давайте поймем, какой раздел математики нам больше всего подойдет для поворота объекта. Тут я думаю вообще вопросов не возникает ни у кого - это тригонометрия.
Ура! У нас сделана вся необходимая подготовительная работа. Мы сделали определенные допущения, разобрались с чем будем работать и готовы к созданию формулы. Но давайте перед этим проговорим все словами, чтобы не осталось недопонимания, так как это ключ к решению всех подобных задач с модифированным условием. Модификаций можно встретить множество, а понимая суть вы решите любую.
Итак, представим, что у нас есть 2 точки - где был объект и где будет на декартовой системе координат. У нас получается вектор вдоль которого происходит перемещение. Мы можем разбить вектор на перемещение по оси Х и по оси У, соответственно получим прямоугольный треугольник, а это даст нам возможность работы с углами. 
Замечательно, и теперь все, что нам надо для поворота - это вычислить арктангенс, помня что арктангенс - обратная функция тангенса, что понятно из названия. То есть вообще все, что нам надо сделать - это только взять арктангенс, определив смещения по осям и все! Очень просто, когда понимаешь механику процесса) 
А теперь давайте посмотрим наглядно
Из этого примера у нас получается, что поворот спрайта произойдет примерно на 30 градусов при таком дискретном перемещении.
На этом всё, удачи на собеседовании и проявляйте больше активности!)
Ставьте лайки, вступайте в сообщество и не пропускайте разборы правильных ответов!
Удачи на собеседовании!
Мои игры на Яндекс ИгрыПерейти на yandex.ru/games/developer