Как смоделировать падение пера в box2d?

10

Я работаю с AndEngine с расширением Box2d, но общий ответ или идея концепции тоже будут оценены.

У меня есть похожие на перья объекты в 2D мире с боковым видом, который я хочу стать частью физического моделирования. Я использую линейное демпфирование, чтобы «перо» медленно падало. Это может быть не очень хорошая идея, может быть, мне лучше применять силу в каждом обновлении, но, тем не менее, это работает, и это заставляет объект выглядеть «легким», и кажется, что есть воздух с сопротивлением.

Теперь, как я могу сделать объекты похожими на перья, падающие в воздухе?

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

Пути падающих предметов

MartinTeeVarga
источник
2
Как насчет скриншота, концептуального эскиза или чего-то в этом роде? В конце концов, есть множество разных вещей, которые вы могли бы считать пером, и я бы сказал, что большинство будет вести себя по-разному в зависимости от вашей ситуации.
Марио
Добавлена ​​дополнительная информация и изображение.
MartinTeeVarga

Ответы:

6

Очень похоже на посадку на Луну, вы должны притворяться . Физика автоповорота, вызванного трепетанием, кувырком и вихрем , сложна. Есть статьи по моделированию этого эффекта , и они производят прекрасные анимации Java .

Но я бы даже пошел дальше в вашей подделке и реализовал что-то вроде растущей синусоиды, чтобы оживить движение.

введите описание изображения здесь

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

Чем меньше масса и больше площадь поверхности объекта, тем больше вы увеличиваете амплитуду и частоту синусоиды. Большая масса и меньшая площадь поверхности должны приводить к уменьшению амплитуды и частоты.

MichaelHouse
источник
3
** Заговорщик **
Николай Марциш
Итак, у меня может быть две функции: растущая синусоида, которая будет контролировать горизонтальное движение, затем некоторая функция, которая будет контролировать вертикальное движение и, вероятно, будет зависеть от того, как далеко от центра находится объект, и будет иметь некоторую кепку, которая нарушит движение и отправить его обратно ... Если я найду такую ​​комбинированную функцию, которая даст мне силу, как мне применить силу? В каждом тике двигателя немного по времени прошло? Я действительно не работал с box2d ранее.
MartinTeeVarga
Похоже, что это будет хорошо работать, позволяя гравитации справиться с остальными. Есть несколько разных способов справиться с силой. Скорее всего, это будет в каждом такте двигателя, основываясь на прошедшем времени, как вы говорите. Это были бы импульсные силы, то есть мгновенные для этого кадра. Посмотрите этот вопрос, чтобы узнать больше (это то же самое, даже если вы не используете Cocos2D, как в вопросе).
MichaelHouse