Sie sind auf Seite 1von 24

ALGORITMOS DE LA CIRCUNFERENCIA

Circulo BRESENHAM

G3

1.- Ejecutar el algoritmo que le fue asignado

#include<graphics.h>

#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h> //exit(), randomize(),random()
#include<dos.h>//delay
//variables globales
int tarjeta, modo, error;

//inicializar modo grfico


void Iniciar()
{
detectgraph(&tarjeta,&modo);
initgraph(&tarjeta,&modo,"C:\\TURBOC3\\BGI");
error=graphresult( );
if (error!=grOk)//hay error
{
printf("error al inicializar modo grafico
%s",grapherrormsg(error));
}
}

//cerrar modo gr fico


void Terminar()
{
closegraph();//vuelve al modo texto

}
void simetrico(int xc, int yc, int x, int y)
{
putpixel(xc+x,yc+y,5);
putpixel(xc-x,yc+y,5);
putpixel(xc+x,yc-y,5);
putpixel(xc-x,yc-y,5);
putpixel(xc+y,yc+x,5);
putpixel(xc-y,yc+x,5);
putpixel(xc+y,yc-x,5);
putpixel(xc-y,yc-x,5);
}

void circulo_BRESENHAM (int xc, int yc, int radio)


{
double x,y,e;
x=radio;
y=0;
e=0;
while(y<x)
{
simetrico(xc,yc,x,y);
e=e+2*y+1;
y++;
if((2*e)>(2*x-1))
{
x--;
e=e-2*x+1;

}
}
}

main() /* Inicializa y finaliza el modo grfico. */


{
//declarar variables locales
int Xmax;
int Ymax;
Iniciar();
//setbkcolor(2);
setcolor(4);
outtextxy(400,80,"GRUPO 3: CIRCULO BRESENHAM ");
circulo_BRESENHAM(300,200,80,70);
getch();
Terminar();
return 0;
}

3.- Establecer las ventajas y desventajas para cada algoritmo


N

Ventajas

CIRCULO BRESENHAM
en su uso de este
algoritmo es muy
ptimo preciso e
eficiente para el trazado
de circunferencias.

Desventajas

CIRCULO BRESENHAM
Requiere aritmtica en el
punto flotante

4.- Ejercicios prcticos:


4.1.- Rueda - Colocar un pixel de distinto color en los 10 puntos tabulados
y trazar una recta que pase por el centro de la circunferencia de esos 10
puntos
Nota: Las rectas deben dibujarse usando uno de los algoritmos
previamente estudiados

#include<graphics.h>
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h> //exit(), randomize(),random()

#include<dos.h>//delay
//variables globales
int tarjeta, modo, error;

//inicializar modo grfico


void Iniciar()
{
detectgraph(&tarjeta,&modo);
initgraph(&tarjeta,&modo,"C:\\TURBOC3\\BGI");
error=graphresult( );
if (error!=grOk)//hay error
{
printf("error al inicializar modo grafico
%s",grapherrormsg(error));
}
}

//cerrar modo gr fico


void Terminar()
{
closegraph();//vuelve al modo texto
}
void simetrico(int xc, int yc, int x, int y)
{
putpixel(xc+x,yc+y,5);
putpixel(xc-x,yc+y,5);
putpixel(xc+x,yc-y,5);
putpixel(xc-x,yc-y,5);
putpixel(xc+y,yc+x,5);

putpixel(xc-y,yc+x,5);
putpixel(xc+y,yc-x,5);
putpixel(xc-y,yc-x,5);
}

void circulo_BRESENHAM (int xc, int yc, int radio)


{
double x,y,e;
x=radio;
y=0;
e=0;
while(y<x)
{
simetrico(xc,yc,x,y);
e=e+2*y+1;
y++;
if((2*e)>(2*x-1))
{
x--;
e=e-2*x+1;
}
}
}

void linea( x1, y1,x2,y2)


{
double x,y,dx,dy,p,xi,yi,k;
dx=abs(x2-x1);

dy=abs(y2-y1);
if(dx>dy)
p=dx;
else
p=dy;
xi=dx/p;
yi=dy/p;
if(x1>x2)
xi*=(-1);
if(y1>y2)
yi*=(-1);
x=x1;
y=y1;
for(k=1;k<=p;k++)
{
x+=xi;
y+=yi;
putpixel(x,y,4);
}
}

main() /* Inicializa y finaliza el modo grfico. */


{
//declarar variables locales
int Xmax;
int Ymax;

Iniciar();
//setbkcolor(2);
setcolor(4);
outtextxy(350,80,"GRUPO 3: CIRCULO BRESENHAM -RUEDA ");
circulo_BRESENHAM(150,200,100);
linea(151,100,152,300);
linea(100,115,205,285);
linea(57,160,240,240);
linea(52,225,248,178);
linea(90,280,212,122);

getch();
Terminar();
return 0;
}

4.2.- Usando el algoritmo que le toco dibuje 6 crculos como se


muestra en la figura
#include<graphics.h>
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h> //exit(), randomize(),random()
#include<dos.h>//delay
//variables globales
int tarjeta, modo, error;

//inicializar modo grfico

void Iniciar()
{
detectgraph(&tarjeta,&modo);
initgraph(&tarjeta,&modo,"C:\\TURBOC3\\BGI");
error=graphresult( );
if (error!=grOk)//hay error
{
printf("error al inicializar modo grafico
%s",grapherrormsg(error));
}
}

//cerrar modo gr fico


void Terminar()
{
closegraph();//vuelve al modo texto
}
void simetrico(int xc, int yc, int x, int y)
{
putpixel(xc+x,yc+y,5);
putpixel(xc-x,yc+y,3);
putpixel(xc+x,yc-y,4);
putpixel(xc-x,yc-y,6);
putpixel(xc+y,yc+x,7);
putpixel(xc-y,yc+x,9);
putpixel(xc+y,yc-x,8);
putpixel(xc-y,yc-x,2);
}

void circulo_BRESENHAM (int xc, int yc, int radio)


{
double x,y,e;
x=radio;
y=0;
e=0;
while(y<x)
{
simetrico(xc,yc,x,y);
e=e+2*y+1;
y++;
if((2*e)>(2*x-1))
{
x--;
e=e-2*x+1;
}
}
}

main() /* Inicializa y finaliza el modo grfico. */


{
//declarar variables locales
int Xmax;
int Ymax;
Iniciar();
//setbkcolor(2);
setcolor(4);
outtextxy(300,80,"GRUPO 3: CIRCULO BRESENHAM -6 CIRCULOS ");

circulo_BRESENHAM(350,200,100);
circulo_BRESENHAM(150,200,100);
circulo_BRESENHAM(325,135,100);
circulo_BRESENHAM(175,135,100);
circulo_BRESENHAM(325,268,100);
circulo_BRESENHAM(175,268,100);

getch();
Terminar();
return 0;
}

Parbola
#include<graphics.h>
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h> //exit(), randomize(),random()
#include<dos.h>
#include<math.h>
int tarjeta, modo, error;

void Iniciar()

{
detectgraph(&tarjeta,&modo);
initgraph(&tarjeta,&modo,"C:\\TC\\BGI");
error=graphresult( );
if (error!=grOk)//hay error
{
printf("error al inicializar modo grafico
%s",grapherrormsg(error));
}
}
void Terminar()
{
closegraph();//vuelve al modo texto
}

void parabola_derecho( xc, yc,p, limte)


{
int x,y,d;
int p2, p4;
p2 = 2*p;
p4 = 2*p2;
x = 0;
y = 0;
d = 1 - p;
//region 1
while(y < p && x<= limte)
{
line(xc+x,yc+y,xc+x,yc+y);
line(xc+x,yc-y,xc+x,yc-y);

if(d >= 0){


x++;
d = d - p2;
}
y++;
d = d + 2*y +1;
}
if(d == 1) d = 1 - p4;
else d = 1 - p2;
//region 2
while(x<= limte){
line(xc+x,yc+y,xc+x,yc+y);
line(xc+x,yc-y,xc+x,yc-y);
if(d <= 0){
y++;
d = d + 4*y;
}
x++;
d = d - p4;
}
}
void parabola_inferior( xc, yc,p, limte)
{
int x,y,d;
int p2, p4;
p2 = 2*p;
p4 = 2*p2;
x = 0;

y = 0;
d = 1 - p;
//region 1
while(x < p && y<= limte)
{
line(xc+x,yc+y,xc+x,yc+y);
line(xc-x,yc+y,xc-x,yc+y);
if(d >= 0){
y++;
d = d - p2;
}
x++;
d = d + 2*x +1;
}
if(d == 1)
d = 1 - p4;
else
d = 1 - p2;
//region 2
while(y<= limte){
line(xc+x,yc+y,xc+x,yc+y);
line(xc-x,yc+y,xc-x,yc+y);
if(d <= 0){
x++;
d = d + 4*x;
}
y++;
d = d - p4;

}
}
void parabola_superior( xc, yc,p, limte)
{
int x,y,d;
int p2, p4;
p2 = 2*p;
p4 = 2*p2;
x = 0;
y = 0;
d = 1 - p;
//region 1
while(x < p && y<= limte)
{
line(xc+x,yc+y,xc+x,yc+y);
line(xc-x,yc+y,xc-x,yc+y);
if(d >= 0){
y--;
d = d - p2;
}
x++;
d = d + 2*x +1;
}
if(d == 1)
d = 1 - p4;
else
d = 1 - p2;
//region 2

while(x< limte){
line(xc+x,yc+y,xc+x,yc+y);
line(xc-x,yc+y,xc-x,yc+y);
if(d <= 0){
x++;
d = d + 4*x;
}
y--;
d = d - p4;
}
}
void parabola_izquierdo( xc, yc,p, limte)
{
int x,y,d;
int p2, p4;
p2 = 2*p;
p4 = 2*p2;
x = 0;
y = 0;
d = 1 - p;
//region 1
while(y < p && x<= limte)
{
line(xc-x,yc+y,xc-x,yc+y);
line(xc-x,yc-y,xc-x,yc-y);
if(d >= 0){
x++;
d = d - p2;

}
y++;
d = d + 2*y +1;
}
if(d == 1) d = 1 - p4;
else d = 1 - p2;
//region 2
while(x<= limte){
line(xc-x,yc-y,xc-x,yc-y);
line(xc-x,yc+y,xc-x,yc+y);
if(d <= 0){
y++;
d = d + 4*y;
}
x++;
d = d - p4;
}
}
circulo_BRESENHAM (xc, yc, radio,n)
{
double x,y,e;
x=radio;
y=0;
e=0;
while(y<x)
{
putpixel(xc+x,yc+y,5);
putpixel(xc-x,yc+y,5);

putpixel(xc+x,yc-y,5);
putpixel(xc-x,yc-y,5);
putpixel(xc+y,yc+x,5);
putpixel(xc-y,yc+x,5);
putpixel(xc+y,yc-x,5);
putpixel(xc-y,yc-x,5);
e=e+2*y+1;
y++;
if((2*e)>(2*x-1))
{
x--;
e=e-2*x+1;
}
}
}
main() {
Iniciar();
Setcolor(6);
outtextxy(100,15,"G3 Parabola ");
circulo_BRESENHAM (300,240,70,5);
parabola_derecho(370,240,50,150);
parabola_inferior(300,310,50,150);
parabola_superior(300,170,50,125);
parabola_izquierdo(230,240,50,150);

getch();
Terminar();
return 0;

Algoritmo de breseham
#include<graphics.h>
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h> //exit(), randomize(),random()
#include<dos.h>//delay
//variables globales
int tarjeta, modo, error;

//inicializar modo grfico


void Iniciar()
{
detectgraph(&tarjeta,&modo);

initgraph(&tarjeta,&modo,"C:\\TURBOC3\\BGI");
error=graphresult( );
if (error!=grOk)//hay error
{
printf("error al inicializar modo grafico
%s",grapherrormsg(error));
}
}

//cerrar modo gr fico


void Terminar()
{
closegraph();//vuelve al modo texto
}

void linea( x1, y1, x2, y2)


{
int aux = 0;
double m,x,y;
m=(y2-y1)/(x2-x1);
x=x1;
y=y1;
while(x<x2)
{
aux ++;
if( aux == 10)
{
putpixel(x,y,4);
aux = 0;

}
else
putpixel(x,y,1);

x++;
y+=m;

}
}

main() /* Inicializa y finaliza el modo grfico. */


{
//declarar variables locales
int Xmax;
int Ymax;
Iniciar();
//setbkcolor(2);
setcolor(5);
outtextxy(450,80,"GRUPO 3: LINEA");
linea(50,80,200,400);
getch();
Terminar();
return 0;
}

Das könnte Ihnen auch gefallen