движение и скорость, чтобы увеличить количество и наоборот - PullRequest
0 голосов
/ 01 августа 2011

Я не очень хорошо знаю математику за пределами алгебры 1, однако обычно я могу "взломать" книгу по математике и заставить уравнения работать в программном обеспечении, которое я пишу - я пытаюсь написать программу, в которой объекты перемещаются на экране, симпульс, скорость, масса, тяга и т. д., который, кажется, называется Vector Math.

Как мне перейти к преобразованию мира декартовых координат x & y в мир физики?Например, как я могу определить величину приращения за итерацию цикла, чтобы создать летающий объект, который имитирует (2d) космический корабль с точки зрения поведения с простыми движками вверх-вниз слева направо?

Пример того, что я пытаюсь выяснить:

x=x+getnextstep(thrust, direction).x
y=y+getnextstep(thrust, direction).y

, поэтому я бы ввел сумму, скажем 0-127 для тяги и 0-360 в качестве направления, и получил бы обратносумма для приращения

Пожалуйста, ответьте в psuedocode, если это возможно, и, если вы чувствуете себя достаточно терпеливым, объясните, как происходит преобразование между декартовым пошаговым и импульсным / массовым / скоростным миром.

1 Ответ

0 голосов
/ 01 августа 2011

Начните с 1D.

Скорость - это скорость изменения положения во времени.В момент времени t 1 объект находится в положении x 1 .Вы позволяете ему двигаться с постоянной скоростью v от времени t 1 до времени t 2 .Пройденное расстояние (x 2 -x 1 ) - это скорость (v), умноженная на истекшее время (t 2 -t 1 ):

(x 2 -x 1 ) = v (t 2 -t 1 )
x 2 = x 1 + v (t 2 -t 1 )

Или в коде:

x + = v dt

где dt - количество (имитированное) времени с момента последнего обновления всего.

Ускорение - это скорость изменения скорость со временем.Если ускорение постоянное, вы должны отслеживать x и v, и мы получаем

x + = v dt + a (dt) / 2 2
v + = adt

(Обратите внимание, что вы не можете изменить порядок этих шагов, не изменив алгебру.)

Этого достаточно, чтобы имитировать объект, скользящий взад и вперед с помощью одного движителя.Вы контролируете «а», который подается двигателем.Если вы хотите вертикальное движение в гравитационном поле, гравитация применяет свое собственное ускорение;просто добавьте силу тяжести к ускорению двигателя, и это ваше.(Ускорение силы тяжести указывает вниз, по определению, и условно оно называется «g».)

Пока не беспокойтесь о импульсе или энергии.Или трение или сопротивление воздуха.Или столкновения.

2D: движение в x и движение в y в основном независимы, поэтому вы можете просто рассматривать их как два одномерных моделирования движения: {x, v x , a x } и {y, v y , a y }.

Если вам нужен двигатель, вы можете point (например,0-360), вы должны разбить этот вектор на x-компонент и ay-компонент, а затем применить вышеизложенное.Расщепление такого вектора - это тригонометрия;если вы не знакомы с ним, вам придется взломать книгу (или википедию).Это не так сложно, но здесь трудно объяснить.

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

...