Maneira eficiente de calcular a curvatura máxima de uma spline cúbica

6

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?

user3049681
fonte
11
Tomar derivadas do spline que você sabe que não ajudou? Duas afirmações são diferentes em significado. Você tem tipo de spline? Como Bézier?
Mal
Claro, é um spline cúbico de Bezier. AFAIK, não existe uma maneira analítica de determinar a curvatura máxima de uma spline cúbica.
user3049681
Spline cúbico significa que possui coeficiente de cubo. Digite Bézier, ok. Este é o caso 2D? Caso 3D? (Para o carro é bastante 2D). O primeiro passo é limpar o que você tem e o que realmente precisa.
Mal
Obrigado, é o caso 2D, tenho o spline cúbico de bezier e tenho uma versão discreta na forma de uma polilinha. Dessas duas coisas, eu gostaria de determinar de alguma forma a curvatura máxima.
precisa saber é o seguinte
11
1. Como você deseja definir " curvatura "? 2. Observe que sua segunda pergunta (sobre o carro) não está bem definida, pois você não nos disse nada sobre como a velocidade do carro varia ao longo do tempo. Você pretendia especificar que o carro viaja em velocidade constante? Nesse caso, essa pergunta é equivalente a perguntar em que ponto maximiza a magnitude da segunda derivada[x(t)]2+[y(t)]2, assumindo que você escolha uma parametrização para que a velocidade seja constante ( ). [x(t)]2+[y(t)]2=1
DW

Respostas:

2

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))tx(t)xty(t)yx(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)κ:RR, 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.

DW
fonte