Como simular queda de penas no box2d?

10

Estou trabalhando com o AndEngine com extensão Box2d, mas a resposta geral ou uma idéia de conceito também serão apreciadas.

Eu tenho objetos parecidos com penas em um mundo de vista lateral 2D e quero fazer parte da simulação de física. Estou usando o amortecimento linear para fazer a "pena" cair lentamente. Isso pode não ser uma boa ideia, talvez eu deva aplicar força em cada atualização, mas, no entanto, isso funciona e faz com que o objeto pareça "leve" e parece que há ar com resistência.

Agora, como posso fazer com que os objetos pareçam penas caindo no ar?

Especificamente, estou procurando dois tipos de objetos: longos com baixa densidade, que devem se mover para baixo em um movimento de balanço lento e objetos quadrados que mudariam aleatoriamente a trajetória. Seria ótimo se essa pudesse ser uma simulação e o comprimento fosse um parâmetro - quanto mais longo o objeto, mais ele balançaria. No momento, quero simular penas, folhas e flocos de neve em um mundo dos desenhos animados.

Caminhos de objetos caindo

MartinTeeVarga
fonte
2
Que tal uma captura de tela ou esboço de conceito ou algo assim? Afinal, há toneladas de coisas diferentes que você pode considerar uma pena, e eu diria que a maioria se comportará de maneira diferente com base na sua situação.
Mario
Adicionadas mais informações e uma imagem.
MartinTeeVarga

Respostas:

6

Assim como o pouso na lua, você deve fingir . A física da autorotação induzida por vibração, queda e vórtice é complexa. Existem trabalhos sobre a simulação desse efeito , e eles produzem algumas animações adoráveis ​​em Java .

Mas, eu iria ainda mais longe na sua falsificação e implementaria algo como uma onda senoidal crescente para animar o movimento.

insira a descrição da imagem aqui

Obviamente, você desejará ajustar os valores iniciais, a taxa de aumento independente de amplitude e frequência até obter algo que pareça mais próximo do que você deseja. Você gostaria de ter alguma aleatoriedade para torná-la interessante. Além disso, como mostra o exemplo, objetos muito leves com alta área superficial podem realmente ir subir perto das margens de suas ondas. Portanto, ondas acima de uma certa amplitude devem começar a levar em consideração um valor de varredura, com um valor máximo limitado pequeno.

Quanto menos massa e mais área de superfície um objeto tiver, mais você aumenta a amplitude e a frequência da onda senoidal. Quanto mais massa e menor área de superfície resultar em diminuição da amplitude e frequência.

MichaelHouse
fonte
3
** Conspirador **
Mikolaj Marcisz
Ok, então eu posso ter duas funções, uma onda senoidal crescente que controlará o movimento horizontal, outras funções que controlarão o movimento vertical e provavelmente dependerão da distância do centro do objeto e terão uma tampa que interromperá o movimento. envie de volta ... Se eu descobrir essa função combinada que me dará uma força, como aplico a força? Em cada marca do mecanismo, um pouco com base no tempo decorrido? Eu realmente não trabalhei com o box2d anteriormente.
MartinTeeVarga
Parece que isso funcionará bem, deixando a gravidade lidar com o resto. Existem algumas maneiras diferentes de lidar com a força. Provavelmente seria em cada marca do mecanismo, com base no tempo decorrido, como você diz. Seriam forças de impulso, significando momentâneas para esse quadro. Veja esta pergunta para saber mais (isso é o mesmo, mesmo que você não esteja usando o Cocos2D como na pergunta).
MichaelHouse