Comment simuler la chute des plumes dans box2d?

10

Je travaille avec AndEngine avec l'extension Box2d, mais une réponse générale ou une idée de concept sera également appréciée.

J'ai des objets ressemblant à des plumes dans un monde de vue latérale 2D que je veux faire partie de la simulation physique. J'utilise l'amortissement linéaire pour faire tomber lentement la "plume". Ce n'est peut-être pas une bonne idée, je devrais peut-être plutôt appliquer une force à chaque mise à jour, mais néanmoins, cela fonctionne et donne à l'objet un aspect "léger" et donne l'impression qu'il y a de l'air avec résistance.

Maintenant, comment puis-je faire ressembler les objets à des plumes tombant dans l'air?

Plus précisément, je recherche deux types d'objets: longs avec une faible densité, qui devraient se déplacer vers le bas dans un mouvement de balancement lent et des objets carrés qui changeraient simplement de trajectoire au hasard. Ce serait formidable si cela pouvait être une simulation et la longueur serait un paramètre - plus l'objet est long, plus il oscille. En ce moment, je veux simuler des plumes, des feuilles et des flocons de neige dans un monde de dessin animé.

Chemins des objets qui tombent

MartinTeeVarga
la source
2
Que diriez-vous d'une capture d'écran ou d'un croquis de concept ou quelque chose comme ça? Après tout, il y a des tonnes de choses différentes que vous pourriez considérer comme une plume, et je dirais que la plupart se comporteront différemment selon votre situation.
Mario
Ajout d'informations et d'une image.
MartinTeeVarga

Réponses:

6

Tout comme l'alunissage, vous devriez le simuler . La physique de l'autorotation induite par flutter, tumble et vortex est complexe. Il existe des articles sur la simulation de cet effet , et ils produisent de belles animations Java .

Mais, j'irais même plus loin dans votre faux et mettrais en œuvre quelque chose comme une onde sinusoïdale croissante pour animer le mouvement.

entrez la description de l'image ici

Évidemment, vous voudrez modifier les valeurs de départ, le taux d'augmentation indépendante de l'amplitude et de la fréquence jusqu'à ce que vous obteniez quelque chose qui ressemble plus à ce que vous voulez. Vous voudriez un peu d'aléatoire pour le rendre intéressant. De plus, comme votre exemple montre, des objets très légers avec une surface élevée pourrait effectivement aller jusqu'à près des bords de leurs vagues. Ainsi, les vagues au-dessus d'une certaine amplitude devraient commencer à prendre en compte une valeur de balayage, avec une petite valeur maximale plafonnée.

Moins un objet a de masse et de surface, plus vous augmentez l'amplitude et la fréquence de l'onde sinusoïdale. L'augmentation de la masse et de la surface devrait entraîner une diminution de l'amplitude et de la fréquence.

MichaelHouse
la source
3
** Conspirateur **
Mikolaj Marcisz
Ok, donc je peux avoir deux fonctions, une onde sinusoïdale croissante qui contrôlera le mouvement horizontal, puis une fonction qui contrôlera le mouvement vertical et dépendra probablement de la distance du centre de l'objet et aura un capuchon qui cassera le mouvement et le renvoyer ... Si je trouve une telle fonction combinée qui me donnera une force, comment puis-je appliquer la force? Dans chaque tic du moteur un peu basé sur le temps écoulé? Je n'ai pas vraiment travaillé avec box2d auparavant.
MartinTeeVarga
Des sons comme ça fonctionneront bien, laissant la gravité gérer le reste. Il existe plusieurs façons de gérer la force. Ce serait probablement dans chaque tic du moteur, en fonction du temps écoulé comme vous le dites. Ce seraient des forces d'impulsion, ce qui signifie momentané pour ce cadre. Consultez cette question pour en savoir plus (c'est la même chose si vous n'utilisez pas Cocos2D comme dans la question).
MichaelHouse