Eu tenho um spline cúbico 2D (Bézier) e tenho a linha de polígono que é uma discretização desse spline.
Existe uma maneira eficiente e simples de implementar uma maneira de calcular a curvatura máxima do spline usando sua representação suave ou a polilinha discreta? Não precisa ser exato, pois é para um jogo; um erro em torno de 10% seria totalmente aceitável.
Palavras diferentes: eu gostaria de saber: se eu dirigisse um carro dirigindo a uma velocidade constante ao longo da estria, qual seria o grau máximo que eu tinha para girar o volante para permanecer nele?
algorithms
numerical-algorithms
user3049681
fonte
fonte
Respostas:
Etapa 1: Expresse os pontos no spline parametricamente, para que o spline seja o conjunto de pontos do formulário , em que é um parâmetro. Aqui representa o coordenado (em função do parâmetro ) e representa o coordenador . Como esse é um spline cúbico, é possível encontrar as funções que são polinômios cúbicos com coeficientes conhecidos que fornecem essa expressão paramétrica.(x(t),y(t)) t x(t) x t y(t) y x(t),y(t)
Etapa 2: use a fórmula na Wikipedia para calcular a curvatura, dada uma representação paramétrica da curva. Isso fornece uma fórmula para a curvatura em função de , ou seja, . Observe que, como e são polinômios cúbicos, você pode calcular explicitamente suas primeira e segunda derivadas, para poder analisar analiticamente uma expressão explícita para , ou seja, para a curvatura em função de .t κ(t) x(t) y(t) κ(t) t
Etapa 3: encontre o valor de que maximize . Observe que agora estamos lidando com uma funçãot κ(t) κ:R→R , ou seja, estamos no caso unidimensional. Assim, podemos encontrar o máximo numericamente usando qualquer um de vários métodos: descida em gradiente, método de Newton ou vários outros métodos.
Como alternativa, você pode calcular analiticamente a derivada deκ(t) e resolva a equação κ′(t)=0 para t . Isso pode permitir uma solução analítica que identifique uma lista de máximos candidatos deκ(t) . Verifique também os pontos de extremidade (os limites inferior e superior parat ) Avalieκ em cada candidato e escolha o que faz o valor de κ(t) o maior possível.
fonte