6 votos

Distancia del punto a la parábola (bezier cuadrático)

Estoy intentando dibujar una curva cuadrática de Bézier (como una línea). Aproximo la curva cuadrática de Bézier como parábola ( $y=x^2$ ), según este documento http://http.developer.nvidia.com/GPUGems3/gpugems3_ch25.html

Allí, en la sección "25.5 Antialiasing" Loop/Blinn afirma que la distancia firmada del punto (x,y) a la curva $f$ (que es $y=x^2$ ) es:

enter image description here

o:

enter image description here

¿Es esto correcto? [He leído, que es imposible tener otra curva bezier "paralela"]

Pregunto esto porque, si quiero detectar la distancia más de 1-2 píxeles, y tener una alta
relación base/altura del triángulo, que la "distancia" se reduce en la dirección de la base.

Por ejemplo, aquí hay una distancia de 50px del lado interno de la curva rellenada en verde, el resto en rojo (todo bien): enter image description here

Y éste encogido (atención, que la distancia en el eje de la altura sigue siendo correcta):

enter image description here

Dibujo de curva en triángulo con coordenadas (0,0) (0,5,0) (1,1). Que es el 1er cuadrante.

1voto

user141614 Puntos 5987

La fórmula sólo da una aproximación. Si $f(\mathbf x)$ es una función continuamente diferenciable y el punto $\mathbf a$ está,,cerca'' de la curva/superficie implícita $f(\mathbf x)=0$ y el punto más cercano de la curva es $\mathbf a_0$ entonces $$ f(\mathbf a) = f(\mathbf a)-f(\mathbf a_0) \approx (\nabla f)\cdot (\mathbf a-\mathbf a_0). $$ Los vectores $\nabla f$ y $\mathbf a-\mathbf a_0$ deben ser aproximadamente paralelas, por lo que $$ f(\mathbf a) \approx \pm ||\nabla f(\mathbf a)|| \cdot ||\mathbf a-\mathbf a_0|| = ||\nabla f(\mathbf a)|| \cdot sd. $$

Si el punto $\mathbf a$ está lejos de la curva, entonces la fórmula es inútil.


Si necesitas la distancia precisa de una parábola, entonces te lleva a alguna ecuación cúbica.

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