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?


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.