9 votos

Encontrar el valor de ' $t$ ' en un punto de una curva cúbica de Bézier

Tengo una curva cúbica de Bézier, y necesito dividirla y crear la misma curva entre el punto de la curva original y el punto final de la curva original.

Según mis investigaciones, he descubierto que el algoritmo de DeCasteljau ayuda a hacer esto. Pero, para utilizar este algoritmo, necesito conocer el ' $t$ en el punto de división.

¿Alguien puede ayudarme a encontrar ' $t$ en un punto dado de una curva cúbica de Bézier

Necesito encontrar el valor de ' $t$ ' en un punto B determinado.

9voto

bubba Puntos 16773

Supongamos que dejamos $\mathbf{P}(t)$ sea la curva de Bézier, y que el punto dado sea $\mathbf{B}$ .

En teoría, queremos encontrar un valor de $t$ tal que $\mathbf{P}(t) = \mathbf{B}$ . Si se escribe el $x$ y $y$ por separado, esto te dará dos ecuaciones cúbicas, que deberían tener una raíz común, $t$ .

Pero, en la aritmética de punto flotante, $\mathbf{B}$ estará a una pequeña distancia de la curva, y tenemos que acomodar esto. Por lo tanto, un enfoque mejor es encontrar el punto de la curva que está más cerca de $\mathbf{B}$ . En otras palabras, encontrar el valor de $t$ que minimice la distancia de $\mathbf{B}$ a $\mathbf{P}(t)$ . En el punto donde esto ocurre, el vector $\mathbf{P}(t) - \mathbf{B}$ será perpendicular a la tangente de la curva, por lo que $$ (\mathbf{P}(t) - \mathbf{B}) \cdot \mathbf{P}'(t) = 0 $$ Desde $\mathbf{P}(t)$ es cúbico y $\mathbf{P}'(t)$ es cuadrática, se trata de una ecuación de grado 5 en $t$ que puedes resolver usando tu buscador de raíces numéricas favorito. Este es el enfoque de fuerza bruta sin cerebro.

Ahora una forma más inteligente ...

Si miras en estas notas de Tom Sederberg En la página 200, encontrará algunas técnicas de "inversión" de curvas polinómicas y racionales, basadas en el uso de resultantes. Concretamente, en la página 200, encontrarás una fórmula para hacer la "inversión" de una curva cúbica escrita en forma de Bezier, y hay un bonito ejemplo trabajado en la página 201. Esto es exactamente lo que necesitas.

Como he mencionado anteriormente, a menudo te encontrarás con casos en los que el punto dado $\mathbf{B}$ no está exactamente en la curva. De todos modos, puedes aplicar la fórmula de inversión y te dará algún valor de $t$ . No estoy 100% seguro de qué punto este valor de $t$ representa. No creo que sea el punto de la curva más cercano a $\mathbf{B}$ pero debería ser suficiente si $\mathbf{B}$ ya está muy cerca de la curva.

2voto

Thaina Puntos 114

Esta es la función para el bezier cúbico

$p = p_0(1 - t)^3 + 3p_1t(1 - t)^2 + 3p_2t^2(1 - t) + p_3t^3$

Se puede reajustar en

$ p = p_0(1 - 3t + 3t^2 - t^3) + 3p_1(t - 2t^2 + t^3) + 3p_2(t^2 - t^3) + p_3t^3 \\ t^3(p_3 - 3p_2 + 3p_1 - p_0) + t^23(p_2 - 2p_1 + p_0) + t3(p_1 - p_0) + p_0 - p = 0 $

A partir de este punto es una ecuación cúbica para $x$ y $y$

Puede encontrar $t$ de $x$ y la ecuación cúbica dará como resultado 3 valores posibles. Entonces se pone $t$ en la función para obtener 3 $y$ y seleccione un valor cercano al $y$ que se pone en

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