Сколько пикселей это импульс в box2d - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть мяч, который вы дуете воздухом.Я хочу, чтобы мяч дул больше, если он находится близко к воздуходувке, и меньше, если он находится дальше от воздуходувки.Я использую box2d, и я использую функцию импульса. "Body-> ApplyLinearImpulse (force, body-> GetPosition ())".Я не могу найти формулу или способ сделать это.Если я хочу, чтобы шар дул на правильное расстояние в 300 пикселей, как я могу это сделать?Пожалуйста, помогите.

Ответы [ 3 ]

1 голос
/ 21 сентября 2011

Если вы хотите рассчитать расстояние до симуляции, вы должны взглянуть на источники box2d. При моделировании скорость тела изменяется в зависимости от силы тяжести, дополнительных приложенных сил, линейного демпфирования, углового демпфирования и, возможно, чего-то большего. Также скорость зависит от скорости итераций.

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

EDIT:

Также вы можете имитировать сопротивление воздуха как: Fa = -k * V * V. Я симулировал движение в трубе таким образом. Работал отлично.

Таким образом, каждый шаг вы можете сделать что-то вроде этого:

BlowForce = k1 / distance; // k1 - coefficient
Resistance = -k2 * V * V; //k2 - another coefficient
TotalForce = BlowForce + Resistance;
body->ApplyForce(TotalForce);
0 голосов
/ 22 сентября 2011

Force = масса * ускорение, поэтому возьмите массу, на которую вы устанавливаете свое тело, рассчитайте необходимое ускорение (не забудьте разделить 300px на PTM_RATIO), а затем умножьте их вместе.

0 голосов
/ 21 сентября 2011

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

300/<your_rendering_window_to_physics_world_ratio>

.

...