2.3. Trazo de líneas curvas.
[1] Dibujar una linea conectando los puntos (x0, y0) y (x1, y1) dentro un marco de mapa de bits parece ser una tarea muy simple. Aunque esto puede sacar a la luz que una aproximación ingenua puede llevar a algoritmos ineficientes o incluso a resultados inaceptables. Por razones de simplicidad, se ha asumido que los dos puntos ha ser conectados por la línea descansan en el mapa de bits. Esto implica que sus coordenadas son dadas en valores enteros. Sin perder las generalizaciones se asume que el primer punto no está localizado a la derecha del segundo punto. Esto implica que x0 ≤ x1. Si esto no se satisface, los dos puntos puden ser simplemente intercambiados para dibujar la línea.
El acercamiento ingenuo para el dibujo de una línea en el mapa de bits hará incrementos a través del eje de las x empezando desde x0 y terminar al x1. Debido a que el de la coordenada y no va a ser usualmente un valor entero, este debe ser redondeado al valor entero más cercano para dibujar el pixel más cercano en el mapa de bits correspondientes a las coordenadas x y. Esto se puede representar en este pseudocódigo:
void drawLine(int x0, int y0, int x1, int y1)
{
int x;
double dy = y1 - y0;
double dx = x1 - x0;
double m = dy/dx;
double y = y0;
for (x=x0; x<=x1; x++)
{
drawPixel(x, round(y));
y = y + m; //or: y = y0 + m*(x - x0);
}
}
En primer lugar nos podemos dar cuenta de que este programa fallará en el caso de dibujar un línea vertical x0 = x1, llevando a una exepción de división por cero cuando se calcule la pendiente. Por supuesto, este caso especial puede ser tratado de forma independiente. Aunque el algoritmo no va a tener más problemas más problemas con la división por cero, este seguirá fallando en dibujar lineas aceptables.
2.3.1. Bézier.
[2]Las curvas de Bézier fueron nombradas así en honor de Pierre Bézier, quien las utilizó para el diseño de carrocerías de automóviles en 1962 en la empresa Rénault. Estas curvas están determinadas típicamente por cuatro puntos ordenados, de los cuales el primero y el último determinan el inicio y el fin de la curva, y los otros dos describen los vectores tangentes inicial y final que controlan la trayectoria de la curva entre los puntos inicial y final. Es importante recalcar que estas curvas no sirven para interpolar, ya que no pasan por todos los puntos de control.
Descripción matemática
Dados cuatro puntos P0, P, P2, P3 (que pueden ser unidimensionales, bidimensionales, tridimensionales, etc.), llamados puntos de control, se dene la curva de Bézier de la siguiente manera:
es decir:
Polinomios de Bernstein
La teoría básica para calcular las curvas de Bézier se basa en la idea que cada punto de la curva es un promedio ponderado de los puntos de control. Esto se consigue con coeficientes especialmente diseñados para eso. Estos coecientes determinan el polinomio que forma la ecuación de Bézier, y son conocidos como Polinomios de Bernstein, y se denen así:
2.3.2. B-spline.
No hay comentarios:
Publicar un comentario