Как мне вычислить местоположение объекта, который одновременно поворачивается и ускоряется?

#physics #game-physics

#физика #игра-физика

Вопрос:

Я пытаюсь написать простую игру, но я застрял на том, что я считаю простой физикой. У меня есть объект, который находится в точке 0,0,0 и движется, скажем, со скоростью 1 единица в секунду. Если я даю команду, что объект должен поворачиваться на 15 градусов в секунду в течение 6 секунд (таким образом, он оказывается на 90 градусов правее своего начального положения) и ускоряться со скоростью 1 единица в секунду в течение 4 секунд (таким образом, его конечная скорость составляет 5 единиц в секунду), как мне вычислить его конечную точку?

Я думаю, что знаю, как ответить на этот вопрос для объекта, который не ускоряется, потому что это просто круг. В приведенном выше примере я знаю, что длина окружности равна расстоянию 4 * (потому что она пересекает 1/4 окружности), и исходя из этого, я могу вычислить радиус и углы и использовать простую тригонометрию для решения ответа.

Однако, поскольку в любой данный момент времени объект движется немного быстрее, чем в предыдущий момент, моим конечным результатом будет не круг, а своего рода дуга. Я полагаю, я мог бы оценить конечную точку, выполняя цикл на каждом шаге (скажем, 60 шагов в секунду), но это звучит подверженным ошибкам и неэффективным.

Кто-нибудь может указать мне правильное направление?

Комментарии:

1. Обычно игры вычисляют движение постепенно. Обычно ошибка не вызывает беспокойства. Есть ли в вашей игре какое-то поведение, которое могло бы вызвать беспокойство? (Например, если объект вечно вращается по кругу и его положение обновляется постепенно, ошибка может усугубляться до тех пор, пока он не будет заметно отклоняться от заданного курса.)

2. У меня в голове есть идея, что если мой клиент может предсказать, где я должен быть в будущем, я мог бы отправить свою начальную точку и свою конечную точку, а затем вычислить задержку и помощь как форму клиентского прогнозирования для других клиентов. Кроме того, мне пришлось бы реже отправлять только одно (немного большее) сообщение и при этом сохранять некоторый уровень точности в отношении того, где находятся и должны быть люди.

3. Чтобы быть точным, во время поворота объект ускоряется, даже если величина его скорости остается постоянной. То есть, если бы ваш объект сохранял скорость 1 единица в секунду, он все равно ускорялся бы (хотя и в боковом направлении), чтобы совершить поворот.

4. Да, я понимаю, что это то, что на самом деле происходит механически. Меня особенно интересует условие, при котором ускорение связано со скоростью выхода объекта. Итак, если скорость составляла 5 единиц в секунду до совершения поворота и составляла бы 25 единиц в секунду после завершения поворота. Это дало бы чистое ускорение в N единиц в секунду.

Ответ №1:

Ваше представление о прохождении — это именно то, что вы делаете.

Почти все игры работают в соответствии с так называемым «игровым тиком». На самом деле может происходить несколько разных тактов.

«Игровой тик» — при каждом игровом тике выполняется набор запросов, ИИ повторно оценивается, и в целом состояние игры изменилось.

«физический тик» — каждый физический тик, каждый физический объект подвергается изменению состояния на основе его текущего физического состояния.

«графическая галочка» — также известная как цикл рендеринга, это просто отображение состояния игры на экране.

Игровой тик и физический тик часто, но не обязательно, совпадают друг с другом. У вас могла бы быть функция физики, которая перемещает объекты с их текущей скоростью вдоль их текущего вектора движения, а также при необходимости применяет к ним гравитацию (изменяя его скорость), добавляя дополнительное ускорение (возможно, с помощью ракетных ускорителей?) в совершенно отдельном цикле. При должном внимании к многопоточности это было бы прекрасно совместимо. Чем более они разъединены, тем легче будет заменить их на более совершенные реализации позже в любом случае.

Моделирование с помощью временного шага — это то, как выполняется почти вся физика в играх реального времени. Я даже занимался тепловым моделированием для министерства обороны, и там мы тоже проводили наше физическое моделирование (просто нам пришлось использовать компьютеры побольше 🙂 )

Кроме того, это позволяет вам реализовать сложные вращения в вашем физическом движке. Чем меньше особых случаев в вашем физическом движке, тем меньше поломок.

Комментарии:

1. Действительно? Я потратил так много времени на поиск красивого элегантного ответа; p Я должен был просто написать свое хитроумное решение прямо 🙂 Ну что ж, тебе жить и учиться. Я бы проголосовал за вас, но, видимо, для этого мне нужно 15 очков репутации.

2. Я должен отметить … это совсем не хитроумное решение 🙂 Или, по крайней мере, остальная отрасль так не думает.

3. Да, извините. Я просто подумал, что это хитроумно, потому что это было первое и самое простое, что пришло на ум. Обычно, по крайней мере, когда дело доходит до физики, я обычно не даю правильного ответа с самого начала. Еще раз спасибо 🙂

Ответ №2:

То, что вы задаете, на самом деле является вопросом о математической скорости изменения. Каждый объект, который находится в движении, имеет координаты положения (x, y, z). Если вы сможете разложить составляющие скорости и ускорения по их отдельным плоскостям, вашей конечной конечной точкой будет (x1, y1, z1), что является соответствующим результатом ваших уравнений в этой плоскости.

Надеюсь, это поможет (: