You are on page 1of 7

Contenido

INTRODUCCION.............................................................................................................................. 1
PROCEDIMIENTO ........................................................................................................................... 1
PUNTO MEDIO PARA CIRCULOS ................................................................................................ 2
CODIGO ........................................................................................................................................ 2
RESULTADO DESPUES DE IMPLEMENTAR .......................................................................... 4
PUNTO MEDIO PARA ELIPSES..................................................................................................... 4
CODIGO ........................................................................................................................................ 5
RESULTADO DESPUES DE IMPLEMENTAR .......................................................................... 6
CONCLUCION .................................................................................................................................. 7
BIBLIOGRAFA Y REFERENCIAS DE INTERNET ..................................................................... 7

INTRODUCCION
En esta actividad trata de codificar u programa para realizar algunas para mostrar los dos
mtodos de dibujar un circulo, aplicando funciones se codifico el mtodo del punto medio
y el mtodo de trigonomtricas o la pitagrica aplicando la

biblioteca de funciones

graficas en openGL ya que esta proporciona una biblioteca bsica de funciones para
especificar primitivas grficas, atribuos, transformaciones geomtricas, transformaciones
de visualizacin y muchas otras operaciones que se pueden realizar, basndonos en el
libro Computer Graphics with OpenGL de Donald Hearn, se realiz esta prctica y se
estuvo "jugando" con el cdigo para ver su funcionamiento, as tambin, sus diferentes
cambios de colores se utiliz como lenguaje principal C++.

PROCEDIMIENTO
El siguiente segmento de cdigo ilustra los procedimientos que podran emplearse para
implementar el algoritmo del punto medio para generacin de crculos. AI procedimiento
c i r c l e M i d p o i n t hay que pasarle el valor del radio del crculo y las coordenadas del
centro del crculo. Entonces, se calcula una posicin de pxel dentro del primer octanle de
la trayectoria circular y se pasa dicha posicin al procedimiento c i r c l e P l o t P o i n t s
1

. Istc procedimiento almacena el color correspondiente al crculo en el bfer de imagen


para todas las posiciones simtricas dentro del crculo, efectuando llamadas repetidas a
las rutina s e t P i x e l , que est implementada con las funciones de dibujo de puntos de
OpenGL.

PUNTO MEDIO PARA CIRCULOS


El algoritmo de lnea de Bresenham se adapta a la generacin de circunferencias al
establecer los parmetros de decisin para identificar el pixel ms cercano a la
circunferencia en cada paso del muestreo. Adems sincroniza el dibujado de los pxeles
en cada octante de la circunferencia.

CODIGO

# includ@<GL /glu~ .h >


class screellPt
(
private :
GL int x,y ;
public:
t-nereute Constructor : Lndt Le Lia escoordinate position to (0, 0). *' 1
screenPt () {
x-y-0;
)
void set Coords (GLi n t xCo o r dValu e, GLi nt yCoor dVa l ue ) {
x - x Co o rdVa l u e ;
y - yCo o r dVa lue ;
)
GLi n t g e t x ( ) can s t {
returnx;
}
GLi r."t gety ( ) con s t {
retur n y ;
}
void increme n t x ( ) {
x++:
)
2

vo i d decr ementy ( ) (
y. - :
)
I:
void s e t Pi xel (GLi nt xCoord , GLin t yeoord)
(
BIBegin (GL_POI NTS) :
8lVertex2i (xCoor d , y e oord ):
BlEnd ( ) ;
I

vo id cir c l eMi d poi n t (GLin t x c , GLi n t ye , GLi n t rad i u s )


(
s creenPt circFt ;
GLi nt p - 1 - radiu s : II I n it ial va l ue f or midpoint parame t e r .
ci [ c ~ t . s e tC o o [ ds (0 , radius ) : II Se t coor ds f or top po i n t of ci rcle.
void ci r cl erl ot P o i~ t s (GLi nt, GLi n t . sc r eenPt );
. P l o ~ the init i a l point i n ea ch cir c le q u a d r a n ~ . . /
c i re l ePlotPo i n ta {xc , -y c , c i r c Pt ) :
/ . Cal c ulate next poin t and plo1: in e a ch cct errt . /
while (cireh.ge t x ( ) < circP1: .g@ty ( {
e i re Pt .inereme nt x ( ) ;
if ( p < 0)
p +- 2 eir ePt .ge ~ x ( ) + I;
else(
eir c Pt. decrementy ( ) ;
P +- 2 (e i r e Pt , ge t x ( ) - ci re P ~ . ge t y ( ) + 1 ;
)
c ir c le P lo~Po i nta (x c , ye, c i re Pt) :
)
)
vo i d e i r cl e Fl ot Poi nt s (GLint x c , GLint ye , sereenPt cire Pt)
{
s e t Pixe l { xc + eireP t . get x ( ) . yo + c a r c s e . geey ( ) ) :
s e t Pixel {xc e irePt . ge1:X ( ) . yo + eirePt . ge t y ( ) ) :
s e tF i xel {xc + c i rcPt .get x ( ) . yo c d r c r t . gety ( )) :
s etFixel (xc e i r cPt .getx ( ) . yo ei reP t.gety ( )):
setFixel (xc + e ircPt . get y ( ) . yo + eireP t. ge t ,. ( ) ) :
se ~ P i xe l (xc e i rc P t. g e ~ y ( ) . yc + eirePt . get s. ( ) ) :
set Pi xe l (xc + e irc Pt. get y ( ) . yo eir eP t . get x ( ) ) :
s e t Pixel ( x c cLr c s -c . ge t y ( ) . yc c i rc Pt,ge t x ( ) ) :

RESULTADO DESPUES DE IMPLEMENTAR

PUNTO MEDIO PARA ELIPSES


En el siguiente segmento de cdigo, se proporcionan procedimientos de ejemplo para la
implementacin del algoritmo del punto medio para el clculo de una elipse. Es necesario
introducir en el procedimiento ellipsf * Midpoint los parmetros de la elipse Rx. Ry, x
Centere y Center . Entonces se calculan las posiciones a lo largo de la curva en el primer
cuadrante y dichas posiciones se pasan al procedimiento c l l i p s e P l o t P o i n t s . Se
utilizan consideraciones de simetra para obtener las posiciones de la elipse en los otros
tres cuadrantes, y la rutina s e t P i x e l asigna el color de la elipse a las posiciones del
bfer de imagen correspondientes a estas posiciones de pantalla.

Una elipse es una circunferencia alargada. Por lo tanto, las curvas elpticas se pueden
generar al modificar los procedimientos para el trazo de circunferencias con el fin de
considerar las diversas dimensiones de una elipse a lo largo de los ejes mayor y menor.

CODIGO
i n l i n e int round (const f l o a t a) { r e t u r n i n t (a + 0 . 5 ) ; }
/ * El s i g u i e n t e p r o c e d i m i e n t o a c e p t a v a l o r e s que d e f i n e n el c e n t ro
* de la e l i p s e y s u s s e m i e j e s mayor y menor, c a l c u l a n d o l as
p o s i c i o n e s de la e l i p s e mediante el a l g o r i t m o d e l punto medio.
*/
void e l l i p s e M i d p o i n t (int xCenter, i n t y C e n t e r , i n t Rx, int Ry)
{
i n t Rx2 Rx * RX;
i n t Ry2 Ry * Ry;
int twoRx2 = 2 * Rx2;
i n t twoRy2 = 2 * Ry2, n t p;
i u t x 0;
i n t y A Ry;
i n t px = 0;
i n t py twoRx2 * y;
voidellipsePlotPoints(int,int,int,int);
/ * Dibujar el punto i n i c i a l en cada c u a d r a n t e . */
e l l i p s e P l o t P o i n t s (xCenter, yCenter, x, y) ;
/ * Region 1 */
p = round (Ry2 - (Rx2 * Ry) + ( 0 . 2 5 * Rx2>) ;
w h i l e (px < py) {
X++;
px += tWORy2;
i f (p < 0)
p += Ry2 + px;
else{
y-;
py -= twoRx2;
p +- Ry2 + px - py;
}
e l l i p s e P l o t P o i n t s (xCenter, yCenter, x, y) ;
}
/ * Regi6n 2 */
p = round (Ry2 * (x+0.5) * (x+0.5) + Rx2 * (y-1) * (y-1) - Rx2 * Ry2);
5

w h i l e (y > 0) {
y-;
py -= twoRx2;
i f (p > 0)
p += RX2 - py;
else{
x++ ;
px += twoRy2;
p += Rx2 - py + px;
e l l i p s e P l o t P o i n t s (xCenter, yCenter, x, y );
}
}
v o i d e l l i p s e P l o t P o i n t s (int xCenter, int yCenter, int x, int y );
{
s e t P i x e l (xCenter + x, yCenter + y );
s e t P i x e l (xCenter - x, yCenter + y) ;
s e t P i x e l (xCenter + x, yCenter - y );
s e t P i x e l (xCenter - x, yCenter - y );
}

RESULTADO DESPUES DE IMPLEMENTAR

CONCLUCION
Se desarrollaron dos programas para mostrar los dos mtodos de dibujar un crculo
Aplicando funciones se codifico el mtodo del punto medio y el mtodo de
trigonomtricas o la pitagrica

BIBLIOGRAFA Y REFERENCIAS DE INTERNET


Grficos por computadora con OpenGL
Tercera edicin
DONALD HEARN
M. PAULINE BAKER
Indiana University - Purdue University

You might also like