Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Trazado de Curvas en Dispositivos Gráficos Matriciales

Descargar como ppt, pdf o txt
Descargar como ppt, pdf o txt
Está en la página 1de 46

Trazado de curvas en

dispositivos gráficos matriciales


Algoritmos de conversión
matricial
• El trazado de primitivas básicas elementales
como segmentos de recta o arcos de
circunferencia requieren de algoritmos
capaces de determinar en la matriz de
píxeles de exhibición cuales píxeles deben
ser alterados para de forma de simular la
apariencia grafica del elemento grafico
deseado.
Representaciones de recta
Simetría y reflexión
• Las líneas que pasan con coordenadas exactas forman ejes de simetría en el
espacio matricial
• Cualquier imagen en el espacio matricial puede ser reflejada en relación a
cualquier recta horizontal, vertical o diagonal sin presentar ninguna
deformación
Conversión matricial de
segmentos de recta
• Seleccionar 2 píxeles inmediatamente encima y debajo
del punto de intersección del segmento
• Todos los píxeles cuyos coordenadas son obtenidas por
el redondeo de las coordenadas de algún punto del
segmento
• Seleccionar en cada vertical el píxel mas próximo del
punto de intersección del segmento con la recta vertical
(continuidad)
• Seleccionar en cada horizontal el píxel mas próximo del
punto de intersección del segmento con la recta
horizontal
Conversión matricial de
segmentos de recta
Características para algoritmos
conversión matricial
• Linealidad
– dar apariencia de estar sobre una recta
• Precisión
– Empezar y terminar en los puntos especificados
• Espesura uniforme
– El segmento no varia de intensidad a lo largo de su extensión
• Intensidad independiente de la inclinación
• Continuidad
– No aparentar interrupciones indeseables
• Rapidez en el trazado de los segmentos
Algoritmo incremental básico
• Sean x1, y1 y x2, y2, además el segmento se
encuentra en el 1er octante

• Si esto sucede entonces en cada vertical de la


malla con abscisa entre x1 y x2 apenas el píxel
mas próximo dela intersección del segmento con
la vertical forma parte de su imagen
Algoritmo incremental básico
yi=mxi + B i
y luego pintar el pixel (xi,round(yi))

(xi,yi)

(xi,Round(yi))
Algoritmo incremental básico
yi=mxi + B i
yi+1=mxi+1 + B =m(xi +x)+ B= yi + mx

Si x=1  yi+1= yi + m
(xi+1,Round(yi +m))

(xi,yi)
(xi+1,yi +m)

(xi,Round(yi))
Algoritmo incremental básico
Algoritmo incremental básico
Algoritmo del punto medio

<0

=0
NE
Q >0
M

P=(xp,yp) E
Opciones Opciones
Pixel para Pixel para Pixel
anterior actual siguiente
Algoritmo del punto medio
La representación explícita de la recta:
dy = y2 – y1; dx = x2 - x1
y=(dy/dx)·x + B

Se transforma en otra implícita:

F(x,y)= a·x + b·y + c = dy·x – dx·y + B·dx = 0


Donde:
a=dy ; b=-dx ; c= B·dx
Algoritmo del punto medio
Propiedades de F(x,y)
NE
F(x,y)=0 en la línea Q
M
F(x,y)>0 en los puntos debajo de la línea
F(x,y)<0 en los puntos sobre la línea
P=(xp,yp) E

Pixel Opciones Opciones


 Aplicamos F al punto M ; d = F(M)=F(xp+1,yp+½) anterior para Pixel
actual
para Pixel
siguiente

Si d > 0  se elige el pixel NE


Si d <= 0  se elige el pixel E
Algoritmo del punto medio
d = a(xp + 1) + b(yp + ½) + c
NE
Llamemos dviejo a este d M
Q

P=(xp,yp) E

Pixel Opciones Opciones


anterior para Pixel para Pixel
Si se eligió el pixel E, ¿cuál es el valor dnuevo? actual siguiente

dnuevo = a(xp + 2) + b(yp + ½) + c

dnuevo = dviejo+ a = dviejo+ dy = dviejo + E


Algoritmo del punto medio
dviejo = a(xp + 1) + b(yp + ½) + c

NE
Q
M

P=(xp,yp) E

Pixel Opciones Opciones


anterior para Pixel para Pixel
actual siguiente
Si se eligió el pixel NE, ¿cuál es el valor dnuevo?
dnuevo = a(xp + 2) + b(yp + 3/2) + c
dnuevo = dviejo + (a+b) = dviejo + (dy-dx) =dviejo +NE
Repaso Algoritmo del punto
medio
Quiero dibujar el segmento entre (x0,y0) y (xfin,yfin) que tienen coordenadas enteras => la recta tiene
coeficientes enteros.
El primer punto medio está en
F(x0+1,y0+½)=F(x0,y0)+a+b/2= a+b/2

Dibujo (x0,y0)
Defino dnuevo= a + b/2
p=0
Mientras no llegué a xfin
Según el signo de dnuevo
elijo y dibujo (xp+1,yp+1)  M    dnuevo
p=p+1
Fin
Repaso Algoritmo del punto
medio
El problema es que dinicio= a + b/2, por lo que hay una fracción
inicial que perjudica todos los cálculos posteriores.

¿Solución?: Multiplicar la función F por 2


F(x,y)=2(ax + by + c)

Conclusiones:
Para cada paso, dnuevo se calcula a partir de una suma entera.
El algoritmo se puede generalizar para líneas con pendientes que
no estén entre 0 y 1.
Conversión matricial para
circunferencias
• Existen muchos abordajes para el trazado
de circunferencias
– En algoritmos simples no incrementales un
polígono de n lados es usado como
aproximación para una circunferencia
– Cuanto mayor sea el valor de n mas lento será
el proceso
Conversión matricial para
circunferencias
Ecuación del círculo centrado en el origen:
X2 + y2 = R2

Función explícita:
y = f(x) entonces para la circunferencia
y=±sqrt(R2-x2)

y al discretizar queda:
y=round(±sqrt(R2-x2))
Problemas en la forma tradicional de

discretización de círcunferencias
Precisa utilizar raiz cuadrada y redondeo
Uso de punto flotante
Dibujo de la circunferencia con huecos
Simetría de 8 lados
Algoritmo de simetría de orden 8
Algoritmo del circulo de punto
medio para circunferencias
P=(xp,yp) E

M ME

>0
SE
MSE
=0
<0

Pixel Opciones Opciones


anterior para Pixel para Pixel
actual siguiente
Algoritmo del circulo de punto
medio para circunferencias
Sea la ecuación de la circunferencia una función
implicita
F(x,y) = x2 + y2 – R2=0
Con valor 0 si el punto ME corresponde a un valor
en la circunferencia y positivo si esta fuera de ella
y negativo si esta dentro de ella
Algoritmo del circulo de punto
medio
Se considera solo 45° de un círculo, de x=0 a x=y=R/sqrt(2) .
dviejo = F(xp+1,yp-½)= (xp+1)2 + (yp-½)2 – R2=0
Si dviejo < 0 se escoge E y luego el punto medio es ME
dnuevo = F(xp+2,yp-½)= (xp+2)2 + (yp-½)2 – R2
dnuevo = dviejo + (2xp + 3)  E = (2xp + 3)
Si dviejo > 0 se escoge SE y luego el punto medio es MSE
dnuevo = F(xp+2,yp-3/2)= (xp+2)2 + (yp- 3/2)2 – R2
dnuevo = dviejo + (2xp–2yp+5)  SE = (2xp–2yp+5 )
Algoritmo del circulo de punto
medio
E y SE varían en cada paso (en el caso lineal son ctes.).
Las operaciones para el cálculo de los dnuevo son enteras.
Falta ver cómo comienza el algoritmo.

Si se parte del punto (0,R), con R entero


el siguiente punto medio es (1,R-½), o sea:
F(1,R-½)=1+(R2-R+¼)-R2= 5/4 –R= dviejo

Solución: pasar a h = d - ¼  hviejo = 1-R


Esto funciona porque h comienza y continúa con valores enteros
Algoritmo del circulo de punto
medio
Diferencias de segundo orden
Si escogemos E el punto de evaluacion es (xp+1 , yp)
en la diferencia de orden 1 tenemos:
E(old) en (xp, yp) = 2xp + 3
En E(new) en (xp+1, yp) = 2(xp+1) + 3
en la diferencia de orden 2 tenemos:
E(new) - E(old) = 2
Analogamente para SE(old) en (xp, yp) = 2xp – 2yp + 5
En E(new) en (xp+1, yp) = 2(xp+1) - 2(yp) + 5
en la diferencia de orden 2 tenemos:
E(new) - E(old) = 2
Diferencias de segundo orden
Si escogemos SE el punto de evaluacion es (xp+1, yp-1)
en la diferencia de orden 1 tenemos:
E(old) en (xp, yp) = 2xp + 3
En E(new) en (xp+1, yp) = 2(xp+1) + 3
en la diferencia de orden 2 tenemos:
E(new) - E(old) = 2
Analogamente para SE(old) en (xp, yp) = 2xp – 2yp + 5
En E(new) en (xp+1, yp) = 2(xp+1) - 2(yp - 1) + 5
en la diferencia de orden 2 tenemos:
E(new) - E(old) = 4
Conversión matricial de elipses
Ecuación del círculo centrado en el origen:
F(x,y) = b2X2 + a2y2 - a2b2 = 0
Con 2a como el eje mayor
Y 2b la media del eje menor
Para graficar una elipse el primer cuadrante se dividira
en dos regiones, en el punto de curva cuya tanjente
tiene inclinacion –1 el cual estara dado por la
gradiente
Conversión matricial de elipses
Conversión matricial de elipses
• Tendrá que ser usado la variable d para saber si el punto
evaluado esta dentro de la elipse o no.
• Repitiendo el proceso de derivación igual que en la
circunferencia tenemos que en la región 1 tenemos la variable
d1, y el punto medio es F(xp+1, yp– 1/2):
E = b2(2xp+3 )
SE = b2(2xp+3) + a2( -2yp-1)
• En la región 2, tenemos d2 y el punto medio es F(xp+1/2, yp–1)
• El primer punto medio será en (0,b) y el primer punto medio será
(1, b-1/2):
Corrección en el trazado
• Los dispositivos gráficos generalmente no son
cuadrados y necesita salvar esta necesidad de las
coordenadas de usuario para las del dispositivo.
• Las diferencias de densidades representan el hecho
de una escala no homogénea realizada por le
dispositivo
• Otra cosa es eliminar el efecto de cerrillado,
generalmente para la corrección de esos errores se
usan técnicas de no solo pintar los píxeles
calculados por el algoritmo de conversión
matricial si no también los vecinos
Antialiasing
• Una de las cosas mas simples para resolver
este problema es aumentar la resolución del
dispositivo
Corrección por áreas no
ponderadas
• Un recta es considera como si fuese un
rectángulo
Corrección por áreas no
ponderadas
• Un recta es considera como si fuese un
rectángulo
Corrección por áreas ponderadas
• Un recta es considera como si fuese un
rectángulo
Corrección por áreas ponderadas

También podría gustarte