Ao final desses ótimos slides , o autor compara todos os diferentes integradores apresentados. De um jeito ou de outro, todos ficam aquém, exceto a Integração Euler Aprimorada e a Integração Runge Kutta 4 , que passam em todos os testes.
Suponho que devo mencionar que estou trabalhando em um jogo 2D que não exige muita física. Estou curioso para saber onde a Integração Euler Aprovada ficaria aquém e o RK4 teria que ser usado.
Meu jogo consiste principalmente de gravidade simples (pulando e caindo), movimento ao longo dos eixos X e Y e colisão de caixas delimitadoras. Vale a pena implementar o RK4 ou o Euler melhorado seria suficiente? Vejo muitas discussões em que os usuários da Euler Integration são castigados, mas pelo que posso ver, o Euler melhorado é quivalente em simples assuntos 2D. Eu imagino que também seria mais rápido.
fonte
Respostas:
Pessoalmente, prefiro o Velocity Verlet para a maioria das simulações. Na minha experiência com esse método, é bastante adequado para equações bastante rígidas. Parece que esse método "Euler aprimorado" é bastante semelhante ao do Velocity Verlet e se baseia em uma classe de métodos de integração conhecida como preditor-corretor . Hoje em dia, você pode ler muitas coisas sobre esses métodos, começando pelos "Grandes passos na simulação de tecidos" de David Baraff, onde o poder dos métodos implícitos realmente brilha. A queda deles é que você:
Portanto, se você não é um guru de matemática, pode ficar com os dedos presos. Apenas experimente o método que você deseja e escolha o que parece ter melhor desempenho para você. Simples nem sempre é melhor, mas para taxas de quadros interativas, só conheço uma palavra: compromisso.
Alguns recursos adicionais que você pode querer considerar:
Jakobsen é um tipo de gênio por ter uma idéia tão simples para problemas pretensiosos (sua especialidade é criptografia, se não estiver enganada, mas conseguiu provar a equivalência matemática de seu método a uma classe de algoritmo iterativo de Gauss-Seidel, que é convergente ) Por uma questão de simplicidade, faça isso primeiro antes de se aprofundar em métodos implícitos.
EDIÇÃO MAIS TARDE : Recentemente, recebi um artigo sobre esta questão do uso de integradores explícitos para simulação de corpos moles ou semi-rígidos e qual é o impacto no desempenho e na qualidade deles. Este documento deve servir como um guia para a escolha de um determinado integrador, dependendo do cenário.
fonte
P: Por que usar o avançado Runge Kutta?
A: Porque é muito exato.
Q: por que não
R: Como você está fazendo um jogo e um mecanismo de física muito exato não importa, ele deve ser bom o suficiente para enganar o jogador.
A propósito, se você tiver um forte amortecimento em colisão, como a maioria das plataformas, um Euler simples é bom.
Eu recomendo fortemente que você diferentemente do código da apresentação use a física de etapas fixas, o que poupa algumas falhas em potencial e permite que você resolva o problema da bola ganhar ou perder energia de uma maneira muito simples. Basta ir para o meio termo entre integração explícita e implícita:
O que a apresentação não mostra é como lidar com colisões para que os objetos não pareçam ir além dos limites. A solução simples para esse problema é usar uma alta frequência de atualização. Uma solução mais complexa, mas potencialmente com melhor desempenho, é mover objetos de volta no momento da colisão; a implementação exata depende do comportamento físico desejado.
fonte
A apresentação tem erro. O método referido pelo apresentador como "Euler melhorado" é na verdade o método Velocity Verlet!
Veja aqui uma fonte mais autorizada: http://www.physics.udel.edu/~bnikolic/teaching/phys660/numerical_ode/node5.html
Também as mesmas equações estão na Wikipedia .
Uma melhoria imediata comum sobre o método de Euler é o método Midpoint, que o apresentador provavelmente tinha em mente, mas acabou confundindo o Velocity Verlet como Euler aprimorado. A única diferença entre o método do ponto médio e o Velocity Verlet é que a velocidade é média da última e da próxima aceleração, em vez de depender apenas da última aceleração.
fonte