Eu tenho alguns objetos no meu jogo que são "jogados". No momento, estou tentando implementar isso fazendo com que esses objetos sigam uma curva parabólica. Eu sei o ponto inicial, o ponto final, o vértice e a velocidade do objeto.
- Como posso determinar a qualquer momento ou quadro o que são as coordenadas x e y?
- Uma curva parabólica é mesmo a curva certa a ser usada?
physics
projectile-physics
Ben Williams
fonte
fonte
Respostas:
O que você está procurando um gráfico paramétrico da função parabólica. É mais fácil fazer com que a função paramétrica use um intervalo de p ∈ [0,1].
A forma canônica de uma parábola paramétrica é
Usando esta fórmula e alguma álgebra básica para transformar a função e eu tenho
Portanto, para obter essas funções, os números que você está procurando são produzidos.
fonte
f_x
usaf_y
a aceleraçãoa
como meia velocidade? Você deve fazer issox(t) = x0 + vx0*t
ey(t) = y0 + vy0*t + .5*ay*t*t
a
et
eram apenas nomes mal escolhidos. Você deve observar que não há um componente de velocidade nas fórmulas. Movimento de Euler e parábolas paramétricas não são a mesma coisa, mas são muito semelhantes, pois o vôo balístico traça um caminho parabólico.Encontrar a equação de uma curva na qual você deseja que seu objeto se mova é uma maneira de realizar o que deseja, mas provavelmente não é o melhor.
Em vez disso, geralmente se registra as propriedades locais de um objeto (velocidade, aceleração) e, em seguida, usa esses valores para atualizar a posição do objeto a cada quadro.
Como você mencionou uma parábola, estou assumindo que você está jogando uma bola em 2D e deseja que ela caia ao longo do eixo y. Portanto, seu objeto tem aceleração constante na direção y (vamos chamá-lo
g
) e nenhuma aceleração na direção x. Quando o objeto é lançado, é dada alguma velocidade, vamos chamá-lovx
evy
.Em seguida, em cada quadro do seu aplicativo, você adicionaria a aceleração do objeto à sua velocidade e, em seguida, acrescentaria sua velocidade à sua posição. Algo como:
Faça isso em todos os quadros e sua bola começará a se mover. Há muito mais a saber sobre isso, mas é um começo.
fonte
A resposta de Brandon é muito boa, mas se você estiver procurando por algo mais avançado, consulte a interpolação linear: http://en.wikipedia.org/wiki/Linear_interpolation
Além disso, se sua curva for uma função, você poderá conhecer as cordas x e y (e z) em um determinado momento. Isso também pode ajudar: http://www.ucl.ac.uk/Mathematics/geomath/level2/fvec/fv8.html#l1
fonte
Nos jogos de console, geralmente usamos a Interpolação Bicúbica para resolver esse problema. Primeiro, experimente a posição de um objeto em intervalos regulares de tempo t. Para um projétil, adicione aceleração gravitacional [0, dy / dt / dt] à sua velocidade [dx / dt, dy / dt] a cada intervalo. Registre todas as coordenadas [x, y] geradas em uma matriz.
Posteriormente, para reconstruir a posição do objeto [x, y] para um dado t, leia as quatro amostras mais próximas daquele t do buffer que você registrou: [t-1, t, t + 1, t + 2]. Misture as quatro amostras de acordo com os coeficientes no artigo da wikipedia para obter movimento suave no espaço.
Isso não é tão preciso fisicamente quanto a execução de cálculos físicos on-the-fly, mas permite licença artística e economia de escala para ajudar na sua simulação.
fonte