Algoritmo para encontrar el centro de una curva de Bezier

8

Necesito encontrar el centro de una curva de Bezier para rotarla. Tengo una lista de todos los puntos (puntos de control, principio y final, todos los puntos en la curva misma). ¿Cómo haría para encontrar su centro?

usuario4656
fuente
44
Las curvas son entidades matemáticas que no tienen centros como tales. Sin embargo, usted podría estar buscando Bouding centro de la caja, mínimo centro del cuadro delimitador, el centro de gravedad del área cerrada que subyace en la curva cuando se conectan los puntos finales, centro de gravedad de polybeziers cerrados, punto medio, punto de control curva promedio etc
joojaa
1
@joojaa definitivamente hay 2 centros naturales en los que puedo pensar, uno es el t=0.5punto. y dos es el punto medio geométrico con respecto a la distancia cartesiana de viaje a lo largo de la línea.
v.oddou
1
@ v.oddou sí, de hecho, hay muchas más por eso que la pregunta necesita aclaración. Todas las aplicaciones vectoriales que he usado (Illustrator, xara, corel, sketch, etc.) Use el centro del cuadro delimitador local para rotar objetos, por lo que es raro ver las otras definiciones de centro utilizadas.
joojaa

Respuestas:

14

Las curvas de Bézier son entidades matemáticas y no tienen un centro claramente definido. De hecho, se pueden definir muchas cosas diferentes como el centro de la curva de Bézier. He tratado de representar algunos de los posibles centros en la imagen 1. Más que esto existe.

ingrese la descripción de la imagen aquí

Imagen 1 : Algunos de los posibles centros de una curva Bézier de un solo tramo

En la práctica, casi todas las aplicaciones de gráficos diseñadas para dibujar utilizan el centro del cuadro delimitador local (BB) como su centro. El software de animación generalmente tiene un concepto adicional de pivote, por lo que utilizan el enfoque de preguntar al usuario, si no se realiza ninguna entrada, a menudo vuelven al centro BB o simplemente al centro de coordenadas local. Esto probablemente se deba a que el BB debe calcularse de todos modos y obtener su centro es bastante fácil de hacer (vea A Primer on Bézier Curves ).

Las métricas del centro de gravedad también son algo naturales, especialmente en un contexto de animación, aunque son más difíciles de calcular. Lo más fácil es discretizar los datos y hacer el cálculo en la entrada discreta. Dicho esto, algunas soluciones de forma cerrada son posibles para el centro de gravedad de la curva, pero no es una ecuación muy buena para formular y simplificar.

Luego tenemos los puntos de la curva: el punto medio por la longitud del arco y el punto donde tEl parámetro es 0.5. En mi mente eltParam es a menudo problemático, aunque fácil de calcular, y pierde significado cuando encadena múltiples Béziers uno detrás de otro para un polybézier. El centro de longitud, por supuesto, es natural siempre que la curva no esté cerrada.

También definimos otros posibles centros, el centro podría estar en el centro de gravedad de la curva del casco, el promedio de los puntos de control o el centro BB de la jaula de control. Aunque en la práctica estos no parecen funcionar muy bien.

Tenga en cuenta : aunque la curva en la imagen 1 muestra el centro BB bastante cerca de algunos centros naturales, este no es siempre el caso para curvas más complejas y especialmente polibéziers.

joojaa
fuente
3
No llamaría a esto un comentario. Lo llamaría una excelente respuesta que aborda el nivel de conocimiento actual del autor de la pregunta, explica completamente por qué la pregunta es más amplia de lo esperado y abre el camino para nuevas preguntas.
trichoplax
@trichoplax, sin embargo, podría resumirse como "definir centro" por los menos educados.
monstruo de trinquete
@ratchetfreak Prefiero respuestas que intentan identificar la brecha de conocimiento del autor de la pregunta en lugar de esperar que comprenda completamente el tema sobre el que están preguntando.
trichoplax
Estoy buscando una manera de obtener el PUNTO MEDIO DE DISTANCIA para mis curvas bezier cuádruples y cúbicas. Estaba usando el valor t 0.5 y, como dijiste, me di cuenta de que es problemático. Lo que estoy tratando de hacer ahora con el cálculo bezier es mover bolas a una velocidad uniforme. Pero usar el valor t lo hace muy difícil. Creo que necesito encontrar los valores t adecuados dependiendo de la longitud del arco. ¿Algún recurso o una pequeña pista para mí, por favor?
Jenix
2
Existe solución de forma cerrada en general por desgracia no sinple de Beziers sino un recurso bueno que cubre numéricamente haciendo esto y más se puede encontrar aquí dura que he leído hoy en el trabajo de un recurso aún mejor debería vincular a ella, pero que no he conseguido el enlace en mi teléfono. Pero tal vez esto sea suficiente @Jenix
joojaa
1

Como no se nos dice qué definición de "centro" usar, también podemos usar la más fácil. Esto sería

Centrar=14 4(PAGS0 0+PAGS1+PAGS2+PAGS3)
dónde PAGS0 0, PAGS1, PAGS2, PAGS3 son los puntos de control de la curva.
bubba
fuente