Quais são alguns métodos para representar trilhos de trem?

21

Eu olhei para isso há um tempo atrás para um pequeno projeto, mas não fui muito longe. Eu gostaria de criar um pequeno programa que permita ao usuário desenhar uma linha de trem e depois permitir que um "trem" siga a linha em um plano 2D. Eu gostaria que a pista tivesse uma forma bastante livre e resultasse em uma linha suave e agradável. Eu brinquei com splines cúbicos e obtive resultados decentes, mas tive muitos problemas para fazer o trem seguir a spline. Também tive muitos problemas ao criar várias faixas e mudar de trem de uma para outra.

Alguém tem conselhos, artigos ou código fonte que podem me ajudar a descobrir algo? Obrigado!

hokiecsgrad
fonte
3
Seria bom se você descrevesse quais são os seus problemas.
Rachel Blum
1
Eu adoraria ver uma demonstração do seu jogo.
precisa saber é o seguinte

Respostas:

10

Ao desenhar trilhas ou estradas, sempre quero começar com splines. No entanto, na última vez em que lutei com splines (como menciona Rachel Blum , o movimento suave de um spline é nojento por causa da parametrização e distâncias), alguém me sugeriu que muitas estradas reais usam arcos circulares em vez de splines. A curvatura constante faz com que seja fácil para distâncias calcular e movimento a uma velocidade constante ao longo deles. Além disso, eles parecem bons.

Comecei a brincar com estradas que alternavam entre arcos circulares e linhas retas. É semelhante à abordagem de Will , mas os arcos circulares têm raio variável. Fiquei muito feliz com essa abordagem, mas não acabei fazendo nada com ela. Experimente esta demonstração (Flash): os controles à esquerda são para splines e os controles à direita são para um arco circular (use o controle deslizante para controlar o comprimento e a alça de arrasto para controlar o ângulo). Faça uma curva muito apertada arrastando o final da estrada para ver quanto melhor o arco circular parece.

Como alternativa, se você quiser brincar com grades (sugerido por Iain ), tente desenhar de ponta a ponta em vez de quadrado a quadrado. Aqui está uma demonstração (applet Java).

amitp
fonte
7

O uso de estrias de hermita adequadas pode levar a cantos apertados e parecer um pouco desastroso:

usando splines de hermita

Eu tive resultados muito mais agradáveis ​​ao tratar o caminho como linhas retas unindo círculos nas articulações:

insira a descrição da imagem aqui

O truque é calcular as tangentes internas e externas dos círculos adjacentes da articulação e calcular o enrolamento de cada articulação para que você passe pelo lado direito.

E, na lógica de criação de faixas, evite auto-interseções de caminho ou transforme-as em junções :)

Aqui está um vídeo usando essa abordagem: http://www.youtube.com/watch?v=PAVksn4btKU

Vai
fonte
6

Você pode tentar permitir que o usuário crie as faixas usando espirais de Cornu . Você encontrará quase nenhuma literatura sobre isso on-line, porque os splines são a maneira de fato de representar curvas em software. No entanto, eles são como os trilhos de trem reais são percorridos. Raph Levien fez muito trabalho para popularizá-los .

maravilhoso
fonte
2

Você pode tentar uma abordagem baseada em grade, na qual cada quadrado pode vincular-se a um ou mais outros quadrados. Você pode então ter algumas peças que cubram vários quadrados, para criar algumas curvas mais suaves. Basicamente modular, como um conjunto de trem.

Iain
fonte
1
Eu tentei algo semelhante a uma abordagem baseada em grade. Basicamente, criei peças de trilha para que você pudesse clicar nelas de forma a dar um pouco mais de liberdade do que grades simples. Conceito muito parecido, eu acho. Funcionou bem, mas desenhar as faixas selecionando a peça apropriada a cada vez que era uma merda.
hokiecsgrad
2

Eu tentei várias técnicas para implementar trilhos de trem e descobri que seções de círculos e linhas retas estavam dando o melhor resultado e a matemática mais fácil de percorrer o trem.

Infelizmente, também tornou a pista muito complicada e pouco intuitiva, pois pequenos movimentos dos pontos de controle enviam a pista em uma direção completamente diferente.

A matemática para decidir como colocar a pista se torna bastante complicada, assim como a adição de mais pontos de controle.

Eu tenho uma breve demonstração em http://www.dailymotion.com/video/xgl2kp_openrailz-tech-demo-3_videogames .

small_duck
fonte
-1

Talvez isso seja útil:
Comportamentos de direção para caracteres autônomos: http://www.red3d.com/cwr/steer/

Gregory
fonte
não são trens cativos para seus trilhos?
Will
@ Will: há uma subseção (que eu não li) sobre o caminho a seguir red3d.com/cwr/steer/PathFollow.html
o0 '.
sim, mas um trem em uma pista só pode mudar a velocidade. Seu caminho é ditado pela pista?
Will