Así que usted desea que el algoritmo "se dividen equitativamente" algunas dada una curva de Bézier en una secuencia de n puntos, que viajan a lo largo de la curva Bézier usted golpea cada punto en el mismo orden, y de tal manera que el directo de la distancia Euclidiana desde un punto al siguiente punto (el acorde de a pie, no en el arco de distancia a lo largo de la curva Bézier) es el mismo?
Sospecho que usted puede ser que convergen en los puntos que desee un poco más rápido si usted pick n "t" de los valores a lo largo de la curva, y empujar a todos ellos en cada iteración --
en lugar de tratar de solucionar uno y pasar a la siguiente, y luego tirar de ellos y empezar de nuevo cada vez que usted toma un nuevo valor de R.
Decir, por ejemplo, que desea dividir la curva en n = 100 puntos.
El primer punto se va a quedar fijo en $t_0$=0 y el último punto se va a quedar fijo en $t_{100}$=1. Probablemente me empiezan en el igualmente espaciados, los valores de t,
$t_0=0; t_1=1/100; t_2=2/100; ...; t_{99}=99/100; t_{100} = 1.$
En cada iteración, calcular las distancias entre los vecinos puntos, y luego empujar el 98 de los valores t (con cuidado de no cruzar) para hacer que las distancias más igualdad,
tarde o temprano, convergiendo en prácticamente iguales distancias.
La parte superior de mi cabeza, me parece recordar 2 métodos para instar a los intermedios de los valores de t.
Permítanme llamar a la fácil-a-entender el método de "Babilonia" de método, y el más rápido de la convergencia "método de la falsa posición de método". (Hay un nombre mejor para estas técnicas?)
el método Babilónico
Empujar cada punto más cercano a la mitad, entre sus vecinos.
$d_{7,8}$ = distancia( B($t_7$), B($t_8$) )
$r_8$ = (1/2) ( $d_{8,9} - d_{7,8}$ ) / ( $d_{7,8} + d_{8,9}$ )
Porque las distancias son siempre positivos, la relación de los valores de $r$ siempre están en el rango de -1/2 +1/2 -- cero si $B(t_8)$ tiene la misma distancia de la $B(t_7)$$B(t_9)$, -1/2 si $t_8$ tiene que mover "a medio camino" de regreso a $t_7$, +1/2 si $t_8$ necesita ser movido "a medio camino" a $t_9$.
Si $r_8$ es positivo,
$newt_8 = t_8 + r_8(t_9 - t_8)$
Si $r_8$ es negativo,
$newt_8 = t_8 + r_8(t_8 - t_7)$
la posición falsa el método de
En cada iteración, calcular el acumulado de rectas líneas de distancia desde el punto inicial a la actual ubicación de cada punto de B($t_0$) ... B($t_{100}$).
Empujar cada punto más cerca de su "propia" de la fracción de la distancia a lo largo de toda la distancia acumulada.
Por ejemplo, decir (después de unas pocas iteraciones) encontramos que la distancia acumulada desde el punto de inicio de la $B(t_0)$ a punto de $B(t_8)$ $c_8$ = 6.9, mientras que el acumulado de distancia hasta el siguiente punto de $B(t_9)$ $c_9$ = 11.5, y la acumulada recta líneas de distancia desde el inicio hasta el final es $c_{100}$ = 101.4.
Necesitamos hacer de la $t_8$ más grande y $t_9$ más pequeño.
El uso de la posición falsa el método para calcular los nuevos valores para todos los 98 "t" de los valores, obtenemos
error8L = 8/100 - $c_8 / c_{100}$
error8R = $c_9 / c_{100}$ - 8/100
Si error8R es cero, se puede ayudar a empujar t8 todo el camino a t9. Si error8L y error8R son ambos positivos y aproximadamente igual, puede ayudar a empujar t8 a mitad de camino a t9.
$r_8$ = error8L / ( error8R + error8L )
El valor de r es la proporción de la distancia del viaje de t8 a t9 -- cero si t8 no necesita cambiar esta iteración, +1 si t8 necesita ser movido todo el camino a t9.
$newt_8$ = $t_8$ + $r_8$($t_9$ - $t_8$).
Si el valor de r a lo largo del segmento desde el punto actual hasta el siguiente punto es negativo, tenemos que volver a calcular un positivo valor de r a lo largo del segmento de la anterior punto para el punto actual, como hacemos para $t_9$ en este ejemplo:
error9L = 9/100 - $c_8 / c_{100}$
error9R = $c_9 / c_{100}$ - 9/100
$r_9$ = error9R / ( error9R + error9L )
$newt_9$ = $t_9$ - $r_9$($t_9$ - $t_8$).
Una forma de garantizar que nunca se cruzan los puntos es el clip de cada valor de r (ya sea hacia adelante o hacia atrás) para un valor máximo ligeramente menor que 1/2.
En nuestro ejemplo, tenemos que deslizar $t_8$ una fracción estimamos como $r_8$ = 0.26 del camino "hacia adelante" de$t_8$$t_9$,
mientras que nosotros necesitamos para deslizar $t_9$ una fracción estimamos como $r_9$ = 0.51 (tal vez enganchado a 0.499) de la forma "hacia atrás" de$t_9$$t_8$.
Por desgracia, he tirado estos progresivo refinamiento de los métodos de algunos borrosos recuerdos.
Tal vez algo que ver con la construcción de seno/coseno tablas en incrementos de un grado?
Espero que algún tipo de comentario me recuerda de que el nombre real de estos métodos, si (como es probable) me he mal recordar el nombre o algún detalle crucial.