0% encontró este documento útil (0 votos)
5 vistas11 páginas

Algoritmos Gráficos en C: DDA, Círculos y Transformaciones

El documento contiene código C para algoritmos gráficos que incluyen el trazado de líneas DDA, generación de círculos por el punto medio, generación de elipses y transformaciones 2D que incluyen traducción, escalado y rotación. El código incluye definiciones de funciones y funciones principales que obtienen la entrada del usuario, realizan los algoritmos y muestran la salida.

Traducido por

ScribdTranslations
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
5 vistas11 páginas

Algoritmos Gráficos en C: DDA, Círculos y Transformaciones

El documento contiene código C para algoritmos gráficos que incluyen el trazado de líneas DDA, generación de círculos por el punto medio, generación de elipses y transformaciones 2D que incluyen traducción, escalado y rotación. El código incluye definiciones de funciones y funciones principales que obtienen la entrada del usuario, realizan los algoritmos y muestran la salida.

Traducido por

ScribdTranslations
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

#include<stdio.

h>
#include<graphics.h>
#include<math.h>
flotar redondear(flotar a);
void main()
{
int gd=DETECT, gm;

// gd=controlador gráfico (detecta el mejor controlador gráfico y lo asigna como predeterminado, gm=modo gráfico.

int x1,y1,x2,y2,pasos,k;
flotante xincr,yincr,x,y,dx,dy;
printf("ingresa x1,y1");

scanf("%d%d", &x1, &y1);

printf("ingrese x2,y2");
scanf("%d%d", &x2, &y2);
initgraph(&gd,&gm,"c:\turboc3\BGI");//inicializa el gráfico
dx=x2-x1;
dy=y2-y1;
si(abs(dx)>abs(dy))

pasos=abs(dx);
else
steps=abs(dy);
xincr=dx/pasos;
yincr=dy/pasos;
x=x1;

y=y1;
por(k=1;k<=pasos;k++)
{
delay(100);//para ver el proceso de dibujo de líneas lentamente.
x+=xincr;
y+=yincr;
ponerpixel(redondear(x),redondear(y),BLANCO);

}
outtextxy(200,20,"DDA");
// para imprimir texto en la ubicación deseada en la pantalla.
outtextxy(x1+5,y1-5,"(x1,y1)");
outtextxy(x2+5,y2+5,"(x2,y2)");
getch();
cerrargráfica();
// cierra el gráfico y regresa al modo gráfico anterior.

flotar redondear(float a)
{
int b=a+0.5;
regresar b;
}
Algoritmo de generación de círculos por el punto medio

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<dos.h>

void dibujar_circulo(int, int, int);


void simetría(int, int, int, int);

void main()
{
int xc, yc, R;
int gd = DETECT, gm;

initgraph(&gd, &gm, "C:\TurboC3\BGI");

printf("Introduce el centro del círculo: ");


printf("Xc =");
scanf("%d", &xc);
printf("Yc =");
scanf("%d", &yc);

printf("Ingresa el radio del círculo:");


scanf("%d", &R);

dibujar_circulo(xc, yc, R);

getch();
cerrargráfica();
}

void dibujar_circulo(int xc, int yc, int rad)


{
int x = 0, y = rad, p = 1-rad;
simetría(x, y, xc, yc);
por(x=0; y>x; x++)
{
si(p<0)
{ p += 2 * x + 3; }
sino
{ p += 2 * (x - y) + 5;
y--;
}

simetría(x, y, xc, yc);


retraso(50);
}
}

void simetría(int x, int y, int xc, int yc)


{
ponerPixel(xc+x, yc-y, VERDE);//Para el píxel (x, y)
retraso(50);
poner_pixel(xc+y, yc-x, VERDE);//Para píxel (y, x)
retraso(50);
putpixel(xc+y, yc+x, VERDE);//Para el píxel (y, -x)
retraso(50);
ponpixel(xc+x, yc+y, VERDE);//Para el píxel (x, -y)
retraso(50);
putpixel(xc-x, yc+y, VERDE);//Para el píxel (-x, -y)
retraso(50);
putpixel(xc-y, yc+x, VERDE);//Para el píxel (-y, -x)
retraso(50);
ponerPíxel(xc-y, yc-x, VERDE); //Para el píxel (-y, x)
retraso(50);
putpixel(xc-x, yc-y, VERDE);//Para el píxel (-x, y)
retraso(50);

}
Algoritmo de Generación de Elipses

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>

void disp();
flotar x, y;
int xc, yc;

void main()

{
int gd = DETECT, gm;
int rx, ry;
flotar p1, p2;
clrscr();

initgraph(&gd, &gm, "C:\TurboC3\BGI");

printf("Introduce el punto central:");


scanf("%d %d", &xc, &yc);

printf("Ingresa el valor para Rx y Ry :");


scanf("%d %d", &rx, &ry);

x = 0;
y = ry;

disp();
p1 = (ry * ry) - (rx * rx * ry) + (rx * rx) / 4;
mientras((2.0 * ry * ry * x) <= (2.0 * rx * rx * y))
{
x++;
si(p1 <= 0)
{ p1 = p1 + (2.0 * ry * ry * x) + (ry * ry); }
sino
{ y--;
p1 = p1 + (2.0 * ry * ry * x) - (2.0 * rx * rx * y) + (ry * ry);
}

disp();
x =-x;

disp();
x =-x;
}

x = rx;
y = 0;

disp();
p2 = (rx * rx) + 2.0 * (ry * ry * rx) + (ry * ry) / 4;

mientras((2.0 * ry * ry * x) > (2.0 * rx * rx * y))


{
y++;
si(p2 > 0)
{ p2 = p2 + (rx * rx) - (2.0 * rx * rx * y);}
sino
{ x--;
p2 = p2 + (2.0 * ry * ry * x) - (2.0 * rx * rx * y) + (rx * rx);
}

disp();
y = -y;

disp();
y = -y;
}

getch();
cerrargráfica();
}

void disp()
{
retraso(50);
ponerpixel(xc+x, yc+y, ROJO);
ponerPixel(xc-x, yc+y, ROJO);
ponerPíxel(xc+x, yc-y, ROJO);
poner_pixel(xc-x, yc-y, ROJO);
}
Programa para traducción:

#include<stdio.h>
#incluyendo<conio.h>
#include<gráficos.h>
#include<math.h>

void main()
{
int gd=DETECT,gm;
int x1,y1,x2,y2,tx,ty,x3,y3,x4,y4;

initgraph(&gd,&gm,"C:\TurboC3\BGI");

printf("Ingrese el punto de inicio del segmento de línea:");


scanf("%d %d", &x1, &y1);

printf("Ingrese el punto final del segmento de línea:");


scanf("%d %d", &x2, &y2);

printf("Introduce las distancias de traslación tx,ty: ");


scanf("%d%d",&tx,&ty);

setcolor(5);
línea(x1,y1,x2,y2);
outtextxy(x2+2,y2+2,"Línea original");

x3=x1+tx;
y3=y1+ty;
x4=x2+tx;
y4=y2+ty;

establecercolor(7);
línea(x3,y3,x4,y4);
outtextxy(x4+2,y4+2,"Línea después de la traducción");

getch();
}

Programa para escalar:

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>

void main()
{
int gd=DETECT,gm;
flotante x1,y1,x2,y2,sx,sy,x3,y3,x4,y4;
initgraph(&gd,&gm,"C:\TurboC3\BGI");

printf("Ingresa las coordenadas del punto de inicio:");


scanf("%f %f",&x1,&y1);

printf("Ingrese las coordenadas del punto final:");


scanf("%f %f", &x2, &y2);

printf("Introduce los factores de escalado sx,sy:\n");


scanf("%f%f",&sx,&sy);

setcolor(5);
línea(x1,y1,x2,y2);
outtextxy(x2+2,y2+2,"Línea original");

x3=x1*sx;
y3=y1*sy;
x4=x2*sx;
y4=y2*sy;

setcolor(7);
línea(x3,y3,x4,y4);
outtextxy(x3+2,y3+2,"Línea después de escalar");

getch();
}

Programa para Rotación:

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#incluye<math.h>

void main()
{
int gd=DETECT,gm;
flotar x1,y1,x2,y2,x3,y3,x4,y4,a,t;

initgraph(&gd,&gm,"C:\TurboC3\BGI");

printf("Ingrese las coordenadas del punto de partida: ");


scanf("%f%f",&x1,&y1);

printf("Ingrese las coordenadas del punto final\n");


scanf("%f%f",&x2,&y2);

printf("Ingresa el ángulo para la rotación\n");


scanf("%f",&a);

establecercolor(5);
línea(x1,y1,x2,y2);
outtextxy(x2+2,y2+2,"Línea original");
t=a*(3.14/180);
x3=(x1*cos(t))-(y1*sin(t));
(x1*sin(t))+(y1*cos(t));
x4=(x2*cos(t))-(y2*sin(t));
y4=(x2*sin(t))+(y2*cos(t));

setcolor(7);
línea(x3,y3,x4,y4);
outtextxy(x3+2,y3+2,"Línea después de la rotación");

getch();
}

También podría gustarte