trazo superficie sirve serie que para numerica lineas distribucion curvas curva bézier aplicaciones graphics bezier cad

graphics - superficie - ¿Cómo compensar una curva de bezier cúbica?



trazo bezier (4)

Intento crear una curva bezier "parrallel". En mis intentos me he acercado, pero no cigarro. Estoy tratando de mantener un sólido desplazamiento de 1px entre las 2 curvas (rojo, azul).

Mi objetivo principal es usar un algoritmo de compensación de bordes para expandir / reducir una ruta svg.

Solución

Para cualquier otra persona que esté buscando una solución, he creado una versión AS3.

http://seant23.wordpress.com/2010/11/12/offset-bezier-curves/


No es posible en general representar el desplazamiento de una curva de Bezier cúbica como una curva de Bezier cúbica (específicamente, esto es problemático cuando tienes cúspides o radio de curvatura cerca de la distancia de desplazamiento). Sin embargo, puede aproximar el desplazamiento a cualquier nivel de precisión.

Prueba esto:

  • Compensar los Beziers en cuestión (lo que ya parece bastante decente)
  • Mida la diferencia entre cada curva original y las curvas de desplazamiento correspondientes. Probaría algo así como 10 muestras y vería si funciona bien.
  • Para cualquier compensación que esté fuera de tolerancia, subdivida (utilizando el algoritmo deCastlejau para Beziers) e itere.

No he implementado un desplazamiento (porque los núcleos que uso ya tienen uno), pero esto parece ser algo para probar.



Lo que pides se llama curva paralela o compensada en matemáticas. El artículo de Wikipedia (citado anteriormente por otros) sobre las curvas de Bezier no se pudo vincular al artículo correcto para "curva de compensación", pero lo he solucionado hace unos segundos. En el mundo de los gráficos vectoriales, esa misma noción se llama acariciar el camino.

¡En general, para la curva cúbica / Bezier, la curva de desplazamiento es un polinomio de orden décimo! Fuente: Kilgard, p. 28

Si todo lo que quiere hacer es rasterizar esas curvas de desplazamiento, en lugar de calcular su forma analítica, puede, por ejemplo, mirar las fuentes de ghostscript. También puede consultar esta solicitud de patente para ver cómo lo hace NV_path_rendering.

Si desea encubrir / aproximar las curvas de desplazamiento, entonces el documento TUG en MetaFog para cubrir METAFONT a las fuentes PostScript es una buena lectura. El sistema METAFONT, anterior a PostScript, permite que las fuentes se describan mediante la operación (más matemáticamente compleja) de stroking, pero las fuentes PostScript Tipo 1 solo permiten utilizar el relleno (a diferencia de los dibujos PostScript en general) por razones de velocidad.

Otro algoritmo para aproximar los desplazamientos como (solo dos) Beziers (uno a cada lado), con código en PostScript, se da en la sección 7 de este documento de Gernot Hoffmann . (Sombrero propina a alguien en el foro de OpenGL para encontrarlo.)

De hecho, hay muchos algoritmos de este tipo. Encontré una encuesta de 1997 de varios algoritmos para aproximar las curvas de desplazamiento. Suponen que las curvas progenitoras son Beziers o NURBS.


De la wikipedia: ( http://en.wikipedia.org/wiki/B%C3%A9zier_curve )

La curva con una desviación fija de una curva de Bézier determinada, a menudo denominada curva de compensación (que se encuentra "paralela" a la curva original, como el desplazamiento entre rieles en una vía férrea), no puede formarse exactamente mediante una curva de Bézier (excepto en algunos casos triviales). Sin embargo, hay métodos heurísticos que generalmente dan una aproximación adecuada para propósitos prácticos.

También puede ver el papel indicado aquí: Esquema del trazo de la curva bezier cúbica