Войти
ПрограммированиеФорумОбщее

Расчет конечной точки приземления тела Box2D

Страницы: 1 2 Следующая »
#0
17:35, 10 дек. 2013

Здравствуйте форумчане!Может кто подскажет как мне высчитать конечную точку тела в Box2D, пробовал обычными физическими формулами не удалось, ниже на картинке схематично расписал что нужно :\
Вообщем меня интересует есть ли возможность с помощью Box2D определить конечную точку объекта?Без учета времени.
ШЬФПУ | Расчет конечной точки приземления тела Box2D


#1
17:53, 10 дек. 2013

Edisoni
Проэмулировать сцену до тех пор, пока тело не коснется поверхности/не остановится. Ну или искать точку первого касания?

#2
17:57, 10 дек. 2013

Точнее мне нужна не точка а только значение Х точки.Мне нужно знать как далеко может пролететь тело по Х, т.е его максимальное значение

#3
18:37, 10 дек. 2013

Edisoni
Так тебе нужно первое касание или до остановки? Поверхность горизонтальная или абы какая?

#4
18:40, 10 дек. 2013

Да нужно первое касание, поверхность горизонтальная - как на картинке.

#5
18:48, 10 дек. 2013

Edisoni
Тогда не вижу проблем - школьная задача по кинематике, тело, брошенное под углом к горизонту. Если, конечно, нет трения.

#6
18:49, 10 дек. 2013

Трение есть

#7
20:45, 10 дек. 2013

Edisoni
Какое именно трение? Линейное от скорости?

#8
10:30, 11 дек. 2013

Которое в Box2D - LinearDamping

#9
15:05, 11 дек. 2013

Без LinearDamping все отлично считает, но мне нужно добавить LinearDamping а вот как установить зависимость между LinearDamping и посчитанным расстоянием не знаю, может подскажете?

#10
15:19, 11 дек. 2013

Edisoni
> Без LinearDamping все отлично считает, но мне нужно добавить LinearDamping а
> вот как установить зависимость между LinearDamping и посчитанным расстоянием не
> знаю, может подскажете?
LinearDamping - работает только когда тело "колизится" с другими телами. Так что пока оно летит - оно не учитывает этот параметр.

#11
15:35, 11 дек. 2013

Edisoni
> Вообщем меня интересует есть ли возможность с помощью Box2D определить конечную точку объекта?Без учета времени.
Такой возможности нету - и быть не может.
Вообще Box2D возможно - не лучшее решение, поскольку даже нельзя узнать, какие к телу в текущий момент времени приложены силы.

Если учитывать ТОЛЬКО статические тела - можно в принципе сделать "копию" мира, впихнуть туда все тела (кроме твоего снаряда) как статические - и просчитать тракторию банальным апдейтом до sleep, но все равно решение крайне ограниченное.

То бишь - если стоит задача отрисовки конечного положения с учетом движущихся платформ и т.п. - надо смотреть другие движки.

#12
16:55, 11 дек. 2013

fzr125
> LinearDamping - работает только когда тело "колизится" с другими телами. Так
> что пока оно летит - оно не учитывает этот параметр.
По моему наоборот, этож псевдо трение, когда тело ни с чем не контактирует применяется этот дампинг чтоб тормозить объект

#13
18:31, 11 дек. 2013

fzr125
Не совсем так, эта величина отвечает за сопротивление воздуха, а при соприкосновении есть другая величина трение в бокс2д.

Вот кусок кода в бокс2д :

// Integrate velocities.
      v += h * (b->m_gravityScale * gravity + b->m_invMass * b->m_force);
      w += h * b->m_invI * b->m_torque;

      // Apply damping.
      // ODE: dv/dt + c * v = 0
      // Solution: v(t) = v0 * exp(-c * t)
      // Time step: v(t + dt) = v0 * exp(-c * (t + dt)) = v0 * exp(-c * t) * exp(-c * dt) = v * exp(-c * dt)
      // v2 = exp(-c * dt) * v1
      // Pade approximation:
      // v2 = v1 * 1 / (1 + c * dt)
      v *= 1.0f / (1.0f + h * b->m_linearDamping);
      w *= 1.0f / (1.0f + h * b->m_angularDamping);

как видно LinearDamping отвечает за скорость снижения скорости т.е сопротивление воздуха

P.S Я проверял поставив LinearDamping на 0 тело гораздо быстрее двигается в воздухе, а при LinearDamping  > 0 тело быстрее теряет скорость находясь в воздухе.
В документации написано что LinearDamping и Трение перемножаются при контакте с чем либо, а в бесконтактном состоянии работает только первая величина .

#14
19:55, 11 дек. 2013

Edisoni
В первом приближении (если не очень много тел), можно создавать практически полную копию текущего мира (т.е. берем все текущие тела/джоинты/ и т.п.), копируем в другой world, и далее присваиваем там телу нужный импульс и просчитываем до достижения телом sleep. В таком случае погрешность будет только в приложенных к телам импульсах (и скорее всего повлияет довольно значительно, если ваше тело встретится с вылетевшим из-за коллизии телом).

Но ИМХО проще будет другой движок приспособить, на bpx2d свет клином не сошелся.

Страницы: 1 2 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.