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!
mathematics
hokiecsgrad
fonte
fonte
Respostas:
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).
fonte
O uso de estrias de hermita adequadas pode levar a cantos apertados e parecer um pouco desastroso:
Eu tive resultados muito mais agradáveis ao tratar o caminho como linhas retas unindo círculos nas articulações:
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
fonte
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 .
fonte
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.
fonte
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 .
fonte
Talvez isso seja útil:
Comportamentos de direção para caracteres autônomos: http://www.red3d.com/cwr/steer/
fonte