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

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

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

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

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


person Bailey    schedule 03.05.2011    source источник
comment
Инкрементальное вычисление движения — это то, что обычно делают игры. Обычно ошибка не вызывает беспокойства. Есть ли в вашей игре какое-то поведение, которое может вызвать беспокойство? (Например, если объект вечно вращается по кругу и его положение обновляется постепенно, ошибка может усугубляться до тех пор, пока он не будет заметно отклоняться от курса.)   -  person Daniel Lubarov    schedule 03.05.2011
comment
У меня в голове есть идея, что если мой клиент может предсказать, где я должен быть в будущем, я мог бы отправить свою начальную и конечную точки, а затем рассчитать отставание и помощь в качестве формы предсказания клиента для других клиентов. Кроме того, мне нужно было бы отправлять только одно (чуть большее) сообщение реже, и все же иметь некоторый уровень точности в отношении того, где люди находятся и должны быть.   -  person Bailey    schedule 03.05.2011
comment
Чтобы быть точным, при повороте объект ускоряется, даже если величина его скорости остается постоянной. То есть, если бы ваш объект сохранял скорость 1 ед/сек, он бы все равно ускорялся (хоть и в поперечном направлении), чтобы совершить поворот.   -  person ysap    schedule 06.05.2011
comment
Да, я понимаю, что на самом деле это происходит механически. Меня особенно интересует условие, при котором ускорение связано со скоростью выхода объекта. Итак, если скорость была 5 единиц в секунду до совершения поворота, и будет 25 единиц в секунду после завершения поворота. Это дало бы чистое ускорение N единиц в секунду.   -  person Bailey    schedule 09.05.2011


Ответы (2)


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

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

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

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

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

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

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

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

person corsiKa    schedule 03.05.2011
comment
Действительно? Я потратил так много времени на поиск красивого элегантного ответа; p Я должен был просто написать свое хитрое решение прямо вверх :) Ну ладно, вы живете и учитесь. Я бы проголосовал за вас, но, видимо, для этого мне нужно 15 очков репутации. - person Bailey; 03.05.2011
comment
Должен отметить... это вовсе не хитрое решение :) По крайней мере, остальная часть индустрии так не думает. - person corsiKa; 03.05.2011
comment
Да извини. Я просто подумал, что это хитрость, потому что это было первое и самое простое, что пришло на ум. Обычно, по крайней мере, когда дело доходит до физики, я обычно не придумываю правильный ответ с первого раза. Спасибо еще раз :) - person Bailey; 04.05.2011

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

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

person Vern    schedule 03.05.2011