Como permitir que um objeto se mova suavemente ao longo de uma linha curva

7

Gostaria de saber como mover objetos, com a rotação levada em conta, para seguir uma linha curva

consulte: http://www.youtube.com/watch?v=iPpO24FeAX4 para obter um exemplo

Em particular, eu me pergunto:

  1. como armazenar os pontos, quantos pontos para armazenar uma linha suave como essa
  2. como interpolar as curvas
  3. como interpolar entre o objeto e o primeiro "waypoint" ao longo da linha
user2530
fonte

Respostas:

6

Observe as curvas de Bezier e as curvas Hermite , que podem ser compostas em splines. Ambos geralmente assumem a forma de uma equação paramétrica em que você insere um tempo tentre 0 e 1; o tempo 0 seria o início do spline, o tempo 1 seria o fim.

A rotação é uma questão de calcular a tangente à curva.

4 pontos de controle para o primeiro segmento, seguidos por 3 pontos adicionais por segmento adicional, são comuns para esse tipo de spline, embora alguns tipos possam querer mais pontos.

Observe que, com splines paramétricos, muitas vezes você pode ter dificuldade em calcular a posição no spline em função da distância, e não do tempo, portanto, se você quiser responder à pergunta "movi a distância X, onde estaria ao longo da curva" você " re para alguns integrando. Da mesma forma, a velocidade instantânea pode variar dependendo da densidade e posição dos pontos de controle.

leander
fonte
1

Eu implementei isso no meu Starterkit de jogos de desenho de linha e evitei usar as soluções com excesso de engenharia. Você provavelmente precisa de um ponto a cada 10 pixels de distância, para poder obter uma linha decentemente suave sem usar muita memória ou fazer chamadas. Então é uma simples questão de mover os objetos do ponto A para o B. Para fazê-los parecerem fluindo suavemente pelo caminho, basta girá-los na direção do movimento. Isso é feito ao longo do tempo e não instantaneamente, para que você fique suave, seguindo um movimento de linha curva sem a necessidade de usar curvas de Bezier ou similares.

Os pontos são armazenados em uma matriz simples, dentro de uma classe Path que também sabe desenhar o caminho usando o OpenGL. Você pode ter qualquer número de pontos de caminho, mas eu os limitaria de 50 a 300, dependendo do dispositivo e da suavidade necessária.

Para interpolar a linha, você deve procurar o algoritmo de média de slides de McMaster (teoria) .

O objeto está se movendo para o primeiro ponto somente quando o usuário desenhou pelo menos dois pontos, para evitar que o objeto gire violentamente. Uma vez que se move para o primeiro ponto, é o mesmo código que para o segundo, terceiro, quarto e assim por diante.

LearnCocos2D
fonte
-1

A resposta para todos os 3 é geralmente splines ou alguma outra curva semelhante.

coderanger
fonte