Algoritmos Gráficos en C: DDA, Círculos y Transformaciones
Algoritmos Gráficos en C: DDA, Círculos y Transformaciones
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");
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 main()
{
int xc, yc, R;
int gd = DETECT, gm;
getch();
cerrargráfica();
}
}
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();
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;
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");
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();
}
#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");
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();
}
#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");
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();
}