Académique Documents
Professionnel Documents
Culture Documents
Guzmn
Graficacin
Unidad I. Introduccin a la graficacin por computadora
Primitivas bsicas de dibujo
Trazado de una circunferencia
Para trazar un crculo solo es necesario conocer el radio
y la ubicacin del punto central de sta. Existen diversas
ecuaciones o formulas que nos permiten obtenerlo, en
estas notas solo se vern dos de stas, la primera basada
en coordenadas cartesianas (rectangulares) y la segunda
basada
en
coordenadas
polares
(funciones
trigonomtricas).
Pgina 1
21/11/2014
M(r, )
El ngulo polar se mide considerando el eje polar como lado inicial y el radio vector como lado
final. Se considera positivo, cuando se genera en sentido contrario al movimiento de las manecillas
del reloj y negativa en el caso opuesto.
Pgina 2
21/11/2014
Para ms informacin sobre este tema, consultar cualquier libro de geometra analtica.
Grados-Radianes
radianes = 180
Grados
Radianes
0
0
1 radian = 180 /
30
/6
45
/4
60
/3
1 = ( / 180) radianes
90
/2
120
2/3
135
3/4
150
5/6
180
270
3/2
360
2
Pgina 3
21/11/2014
= 1/r
Una de las desventajas que presenta este algoritmo es el calculo continuo del seno de y el coseno
de para cada incremento angular, lo cual consume mucho tiempo.
Dos puntos consecutivos:
x1 = r cos
y1 = r sen
x2 = r cos ( + d)
y2 = r sen ( + d)
Pgina 4
21/11/2014
Aplicando la identidad trigonomtrica para calcular el seno y coseno de la suma de dos ngulos
tenemos:
cos ( + d) = (cos )(cos d) - (sen )(sen d)
sen ( + d) = (sen )(cos d) + (cos )(sen d)
Sustituyendo x2 y y2
x2 = (r cos )(cos d) - (r sen )(sen d)
y2 = (r sen )(cos d) + (r cos )(sen d)
Sustituyendo x1 y y1
x2 = x1 cos d - y1 sen d
y2 = y1 cos d + x1 sen d
Al iniciar, x=0, y=r,
El sen , y el cos se calcula solo una vez al inicio del proceso
Se aprovecha la simetra de la circunferencia lo que disminuye el nmero de clculos:
P1(x, y)
P5(-x, -y)
P2(y, x)
P6(-y, -x)
P3(y, -x)
P7(-y, x)
P4(-x, y)
P8(x, -y)
algoritmo circulo_incremental(entero xc, entero yc, entero r)
inicio
entero tx, ty
double dt, cc, ss, x, y, aux
dt = (double) 1/r
cc=coseno(dt)
ss=seno(dt)
x=0
y=r
mientras (y>=valorAbsoluto(x))
inicio
tx=redondear(x)
ty=redondear(y)
dibujarPixel(xc+tx, yc+ty)
dibujarPixel(xc-tx, yc+ty)
dibujarPixel(xc+tx, yc-ty)
dibujarPixel(xc-tx, yc-ty)
dibujarPixel(xc+ty, yc+tx)
dibujarPixel(xc+ty, yc-tx)
dibujarPixel(xc-ty, yc+tx)
dibujarPixel(xc-ty, yc-tx)
aux=x
x=x*cc-y*ss
y=y*cc+aux*ss
fin
fin
maria eugenia puga nathal
Pgina 5
21/11/2014
algoritmo de Bresenham
En este algoritmo se calculan los puntos de 0 a 45, algo similar que el anterior y se aprovecha de
la simetra de la circunferencia para obtener el trazado del resto de los puntos. Est nuevamente
basado en la ecuacin de la recta polinomial de segundo grado.
__
De x=0 a x= r / 2
Al igual que en el algoritmo de la recta, se toman dos posibles valores:
A(xi+1, yi) B(xi+1, yi-1)
r2 = (xi+1)2 + y2
y2 = r2 - (xi+1)2
d(a)= yi2 - y2
d(b)= y2 (yi -1)2
d(a)= yi2 r2 + (xi+1)2
d(b)= r2 - (xi+1)2 (yi -1)2
Si la distancias hacia algunos puntos candidatos es igual a 0, el punto est sobre la circunferencia,
sino es lo anterior, toma el punto mas cercano:
P1 = d(a) d(b)
P1 = yi2 r2 + (xi+1)2 - r2 + (xi+1)2 + (yi -1)2
P1 = 2(xi+1)2 + yi2 + (yi -1)2 2r2
Si el punto inicial es x=0, y=r
Pi = 2(0+1)2 + r2 + (r -1)2 2r2
Pi = 2 + r2 + (r -1)2 2r2
Pi = 2 + r2 + r2 2r +1 2r2
Pi = 3 - 2r
Si el valor de Pi < 0
xi+1=xi+1
y i+1=y i
r2 = (xi+1)2 + (y i)2
p i+1 = pi + 4xi + 6
Si el valor de Pi >= 0
xi+1=xi+1
y i+1=y i - 1
2
2
r = (xi+1) + (y i - 1)2
p i+1 = pi + 4(xi - y i)+ 10
1. seleccionar como punto inicial la coordenada (0, r) donde r = radio
2. calcular el primer parmetro como:
P=3-2r
3. incrementando x en pasos unitarios, calcular cada parmetro sucesivo de p i+1 a partir de los
siguiente:
Si pi<0
sisi y i+1=y i
p i+1 = pi + 4xi + 6
Pgina 6
21/11/2014
Si pi>0
sisi y i+1=y i - 1
p i+1 = pi + 4(xi - y i)+ 10
4. repetir paso 3 hasta que x sea mayor o igual que y
Para dibujar la circunferencia, aplicar la simetra de la circunferencia para los siete puntos restantes,
en los clculos se obtiene el primer punto(x, y), por lo que bastara que se vayan intercambiando
estas dos coordenadas, al igual que sus signos
algoritmo circulo_Bresenham(entero xc, entero yc, entero r)
inicio
entero p, x, y
x=0
y=r
p=3-2*r
mientras (x<=y)
inicio
dibujarPixel(xc+x, yc+y)
dibujarPixel(xc-x, yc+y)
dibujarPixel(xc+x, yc-y)
dibujarPixel(xc-x, yc-y)
dibujarPixel(xc+y, yc+x)
dibujarPixel(xc+y, yc-x)
dibujarPixel(xc-y, yc+x)
dibujarPixel(xc-y, yc-x)
si p<0
si si p=p+4*x+6
si no inicio
p=p+4*(x-y)+10
y=y-1
fin
x=x+1
fin
fin
Pgina 7
21/11/2014