7 votos

Curvatura Bezier

Estoy intentando entender las curvas cuadráticas de Bézier pero no consigo pasar una cosa. Por favor, ¿qué es una "curvatura" y cómo puedo calcularla?

Lo pregunto porque he encontrado por ejemplo este y este .

También he visto:
$$\text{Curvature}\, = \,(P1x - P2x)(P3y - P2y) - (P3x - P2x)(P1y - P2y) $$ donde $P1$ , $P2$ , $P3$ son puntos que definen la curva.

Ahí está el problema, no veo cómo se puede llegar a esa fórmula. ¿Podría alguien explicármelo?

8voto

baconguy14 Puntos 56

La curvatura de una curva parametrizada $B(t) = ((x(t), y(t))$ viene dada por [1]

$$ \kappa(t) = \frac{\left|B'(t), B''(t)\right|}{|| B'(t)||^3}, $$

(Edición: potencia fija en el denominador).

donde el numerador es el determinante de la matriz formada al concatenar $B'(t)$ y $B''(t)$ .

Nótese que la curvatura es una función del parámetro $t$ La curvatura no es necesariamente constante a lo largo de la curva.

Una curva cuadrática de Bézier está definida por los puntos $P_0$ , $P_1$ y $P_2$ está parametrizado por [2]

$$ B(t) = \left(1 - t\right)\left[\left(1 - t\right) P_0 + t P_1\right] + t \left[ \left(1 - t\right) P_1 + t P_2 \right], $$

con derivados

$$ B'(t) = 2\left(1 - t\right)\left(P_1 - P_0\right) + 2t\left(P_2 - P_1\right) $$ y $$ B''(t) = 2\left(P_2 - 2P_1 + P_0\right). $$

Sustituyendo esto en la expresión de la curvatura (utilizando la bilinealidad del operador determinante y el hecho de que $\left|x,x\right|\equiv0$ ) da como resultado el numerador

$$\begin{align} n(t) &= \left|B'(t), B''(t)\right| \\ &= 4(1-t)\left|P_1-P_0, P_0 - 2P_1 + P_2\right| \\ &\quad+ 4t\left|P_2-P_1, P_0 - 2P_1 + P_2\right| \\ &= 4(1-t)\left|P_1-P_0, P_2-P_1\right| + 4t\left|P_2-P_1, P_0-P_1\right| \\ &= 4\left| P_1-P_0, P_2-P_1 \right|. \end{align}$$

El denominador viene dado por

$$ m(t) = ||B(t)||^3, $$

con

$$\begin{align} ||B(t)||^2 &= 4(1-t)^2 ||P_1 - P_0||^2 + 8t(1-t)(P_1 - P_0)\cdot(P_2 - P_1) + 4t^2||P_2 - P_1||^2. \end{align}$$

Como originalmente vine aquí en busca de la curvatura máxima de una curva de Bezier cuadrática, también presentaré eso aquí, aunque no esté estrictamente en la pregunta.

La curvatura máxima se encuentra en (i) el máximo de la función $\kappa(t)$ o (ii) uno de los puntos finales de la curva si el máximo se encuentra fuera del rango $(0,1)$ .

El máximo de la función $\kappa(t)$ corresponde a $\kappa'(t) = 0$ es decir

$$ \kappa'(t) = \frac{n'(t) m(t) - n(t) m'(t)}{m(t)^2}. $$

Dado que el numerador $m(t)$ es una constante, encontrar los ceros de $\kappa'(t)$ equivale a encontrar los ceros de $m'(t)$ que a su vez se reduce a encontrar los ceros de $||B'(t)||^2$ . Esto viene dado por

$$ \frac{\mathrm{d}}{\mathrm{d}t} ||B(t)||^2 = 8(P_1 - P_0) \cdot (P_0 - 2P_1 + P_2) + 8t || P_0 - 2P_1 + P_2 ||, $$

que nos da el valor óptimo del parámetro

$$ t^* = \frac{(P_1 - P_0) \cdot (P_0 - 2P_1 + P_2)}{|| P_0 - 2P_1 + P_2 ||}. $$

Sustituyendo esto en la expresión y un poco más de álgebra se obtiene

$$ \kappa(t^*) = \frac{||P_2 - 2P_1 + P_0||}{2|P_1 - P_0, P_2 - P_1|}. $$

Espero que esto ayude (a alguien, en algún lugar, algún día)

[1] https://en.wikipedia.org/wiki/Curvature

[2] https://en.wikipedia.org/wiki/B%C3%A9zier_curve#Quadratic_B%C3%A9zier_curves

2voto

Yves Daoust Puntos 30126

Esta fórmula es incompleta, evalúa un múltiplo de la curvatura.

Establezcámoslo ajustando una circunferencia a los tres puntos, de la siguiente manera: primero traslademos los puntos de manera que $P_2$ llega al origen, y define $U=P_1-P_2,V=P_3-P_2$ .

Se sabe que la ecuación de una circunferencia que pasa por el origen es $$(x-x_C)^2+(y-y_C)^2=x_C^2+y_C^2=r^2,$$ que es de la forma $$2x_Cx+2y_Cy=x^2+y^2=w.$$ Así que formamos el sistema $$x_Cx_U+y_Cy_U=\frac{w_U}2\\x_Cx_V+y_Cy_V=\frac{w_V}2.$$ La solución viene dada por la regla de Cramer, $$\Delta=\left| \begin{array}{ccc}x_U&y_U\\ x_V&y_V\\ \end{array} \right|,\\ x_C=\frac{\left| \begin{array}{ccc}w_U&y_U\\w_V&y_V\\ \end{array} \right|}{2\Delta}, y_C=\frac{\left| \begin{array}{ccc}x_U&w_U\\x_V& w_V\\ \end{array} \right|}{2\Delta}.$$ Luego deducimos la aproximación del radio de curvatura $r$ o su inversa $\kappa$ la curvatura, y

$$\kappa=\frac1{\sqrt{x_C^2+y_C^2}}=2\frac{x_Uy_V-x_Vy_U}{\sqrt{(w_Ux_V-w_Vx_U)^2+(w_Uy_V-w_Vy_U)^2}}.$$

En el numerador, se reconoce la expresión original.

1voto

bubba Puntos 16773

Tal vez sea más fácil empezar con el "radio de curvatura", en lugar de la curvatura. Tomemos un punto concreto de nuestra curva. Pensemos en un círculo que toca la curva en ese punto y que se curva en la misma medida que la propia curva. Este círculo tiene un nombre: se llama círculo "osculante", derivado de la palabra latina que significa "besar". La idea es que el círculo tiene una forma muy íntima de contacto con la curva original. El radio de este círculo osculante se denomina radio de curvatura de la curva en el punto dado. Dicho de otro modo, el radio de curvatura en un punto es el radio de una circunferencia de "mejor ajuste" en ese punto.

Ahora, si has comprendido todo eso, la curvatura es fácil: la curvatura es sólo el recíproco del radio de curvatura.

Intuitivamente, la curvatura es una medida de la rapidez con la que una curva se aleja de su línea tangente. Puedes obtener fórmulas para la curvatura y el radio de curvatura en términos de las derivadas de las ecuaciones de la curva. De ahí viene la fórmula que has citado. Puedes encontrar estas fórmulas en cualquier libro de "geometría diferencial".

Para una curva de Bézier cuadrática, la curvatura depende en gran medida del ángulo entre las dos "patas" del polígono de control. Si estas dos patas son colineales (lo que significa que los tres puntos de control son colineales) entonces la curva tendrá curvatura cero en todas partes. Esto debería tener sentido - la curva se convertirá en recta, por lo que su radio de curvatura es infinito, por lo que su curvatura es cero.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X