pierre online juego illustrator graficar curvas bézier agencia math graphics vector-graphics bezier splines

math - juego - graficar curvas de bezier online



Interpolación de secuencia de punto (9)

¿Has mirado el comando spline de Unix? ¿Puede eso ser forzado a hacer lo que quieres?

Dada una secuencia arbitraria de puntos en el espacio, ¿cómo producirías una interpolación continua sin problemas entre ellos?

Las soluciones 2D y 3D son bienvenidas. También se agradecen las soluciones que producen una lista de puntos en granularidad arbitraria y soluciones que producen puntos de control para curvas Bezier.

Además, sería genial ver una solución iterativa que podría aproximarse a las primeras secciones de la curva a medida que recibe los puntos, para que pueda dibujar con ella.


Hay varios algoritmos para interpolar (y exrapolar) entre un conjunto de puntos aribtrary (pero final). Debería verificar recetas numéricas , también incluyen implementaciones C ++ de esos algoritmos.


Una forma es Lagrange polynominal , que es un método para producir un polinomio que pasará por todos los puntos de datos dados.

Durante mi primer año en la universidad, escribí una pequeña herramienta para hacer esto en 2D, y puedes encontrarla en esta página , se llama solucionador de Lagrange. La página de Wikipedia también tiene una implementación de muestra.

Cómo funciona es así: tiene un polinomio de orden n, p(x) , donde n es el número de puntos que tiene. Tiene la forma a_n x^n + a_(n-1) x^(n-1) + ...+ a_0 , donde _ es subíndice, ^ es potencia. A continuación, conviértalo en un conjunto de ecuaciones simultáneas:

p(x_1) = y_1 p(x_2) = y_2 ... p(x_n) = y_n

Convierta lo anterior en una matriz aumentada y resuelva los coeficientes a_0 ... a_n . Entonces tienes un polinomio que atraviesa todos los puntos, y ahora puedes interpolar entre los puntos.

Sin embargo, tenga en cuenta que esto puede no ser adecuado para su propósito, ya que no ofrece ninguna manera de ajustar la curvatura, etc. - está atrapado con una única solución que no se puede cambiar.


Lamentablemente, Lagrange u otras formas de interpolación polinómica no funcionarán en un conjunto arbitrario de puntos. Solo funcionan en un conjunto donde en una dimensión, por ejemplo, x

x i <x i + 1

Para un conjunto arbitrario de puntos, por ejemplo, una trayectoria de vuelo de un avión, donde cada punto es un par (longitud, latitud), será mejor simplemente modelar el viaje del avión con la longitud y la latitud y la velocidad actuales. Ajustando la velocidad a la que el avión puede girar (su velocidad angular) dependiendo de qué tan cerca esté del próximo punto de referencia, puede lograr una curva suave.

La curva resultante no sería matemáticamente significativa ni daría puntos de control más blandos. Sin embargo, el algoritmo sería computacionalmente simple independientemente del número de puntos de referencia y podría producir una lista interpolada de puntos con granularidad arbitraria. Tampoco es necesario que proporcione el conjunto completo de puntos por adelantado, simplemente puede agregar waypoints al final del conjunto según sea necesario.


Google "regresión ortogonal".

Mientras que las técnicas de mínimos cuadrados intentan minimizar la distancia vertical entre la línea de ajuste y cada f (x), la regresión ortogonal minimiza las distancias perpendiculares.

Apéndice

En presencia de datos ruidosos, vale la pena echarle un vistazo al venerable algoritmo RANSAC .


En el mundo de los gráficos en 3D, los NURBS son populares. Más información es fácil de googlear.


Deberías echarle un vistazo a B-splines . Su ventaja sobre las curvas de Bezier es que cada parte solo depende de los puntos locales. Así que mover un punto no tiene efecto en partes de la curva que están muy lejos, donde "lejano" está determinado por un parámetro de la spline.

El problema con el polinomio de Langrange es que agregar un punto puede tener efectos extremos en partes aparentemente arbitrarias de la curva; no hay "localidad" como se describe arriba.


Se garantiza que la spline Catmull-Rom pasa a través de todos los puntos de control. Encuentro esto más útil que tratar de ajustar los puntos de control intermedios para otros tipos de splines.

Este PDF de Christopher Twigg tiene una breve introducción a las matemáticas de la spline. La mejor oración resumida es:

Las splines Catmull-Rom tienen continuidad C1, control local e interpolación, pero no se encuentran dentro del casco convexo de sus puntos de control.

Dicho de otra manera, si los puntos indican una curva cerrada a la derecha, la spline se inclinará hacia la izquierda antes de girar hacia la derecha (hay una imagen de ejemplo en ese documento). La rigidez de esos giros es controlable, en este caso usando su parámetro tau en la matriz de ejemplo.

Aquí hay otro ejemplo con algún código DirectX descargable.