Física 2D: armazenando a posição anterior versus armazenando a velocidade


9

Eu vi vários tutoriais e livros sobre jogos em 2d em que a posição anterior de um objeto era armazenada no estado, em vez do vetor velocidade. A velocidade é então calculada em cada quadro como uma diferença entre as posições.

Quais são as vantagens desse método?


2
Você poderia criar um link para os tutoriais em questão, por contexto?
Anko

Eu compartilho a mesma curiosidade de Anko
dnk drone.vs.drones

Este tutorial menciona que isso se chama integração Verlet. Encontrei este artigo , no qual as vantagens de Verlet são explicadas. Basicamente, é mais fácil lidar com colisões e restrições complexas.
Terzalo 13/12/2015

@Terzalo Veja a versão atualizada da minha resposta para ver se ela ajuda a entender a lógica geral por trás do caso específico em questão
2015

Respostas:


1

Sem saber exatamente os tutoriais ou livros que você leu, eis o que posso lhe dizer.

Para ser mais preciso em termos de definição da física: a direção do vetor é calculada como a diferença entre a posição atual e a última posição. A velocidade do vetor é igual àquela dividida pelo tempo decorrido ao passar de uma posição para a outra. Consulte: http://www.physicsclassroom.com/class/1DKin/Lesson-1/Speed-and-Velocity

No entanto, quando o tempo decorrido é considerado o "quadro 1" genérico, ou seja, do último quadro à corrente, a velocidade do vetor e a direção do vetor tornam-se iguais. No pseudo-código:

direction = current_position - past_position
elapsed_time = 1 frame
velocity = direction / elapsed_time

Portanto, em geral, o principal motivo para armazenar a posição no último quadro e obter a posição no quadro atual é que ele pode ser a única maneira ou a maneira mais barata de conhecer a direção atualizada (e, portanto, a velocidade atualizada), ou seja, a direção do movimento no quadro atual.

Suponha que você armazene a direção (ou mesmo a velocidade) em um determinado quadro. No próximo quadro, a única maneira de saber se a direção (ou mesmo a velocidade) mudou foi se você a calculou novamente. O motivo é que a direção anterior ou a velocidade anterior não informam a direção atual ou a velocidade atual, caso o movimento seja alterado de um quadro para o próximo.

Agora, levando em conta os tutoriais mencionados no comentário para sua própria pergunta, fica ainda mais claro. Em um dos tutoriais, os autores dizem que:

Agora, vamos ensinar nossa partícula como se mover com a integração do Verlet. Essa é apenas uma maneira elegante de dizer que vamos descobrir a rapidez com que nossa partícula está se movendo, comparando sua posição nesse quadro com a sua última posição. Por quê? Porque isso nos dá velocidade implícita - qualquer alteração na posição atual da partícula atualizará automaticamente sua velocidade

Portanto, como você pode ver, o armazenamento do último quadro da posição permite, como eu disse acima, o cálculo atualizado da velocidade no quadro atual quando o objeto (no tutorial é uma partícula) muda de posição. Se você salvou apenas a direção ou a velocidade no último quadro, não seria possível atualizá-lo com a mesma facilidade caso a posição mudasse do quadro passado para o quadro atual. Portanto, como também apontado no outro tutorial ao qual você vinculou, salvar a posição anterior permite a atualização automática da velocidade quando as posições mudam.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.