1. Trang chủ
  2. » Thể loại khác

bài tập đồ họa máy tính

10 971 1

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 14,25 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trang 1

#include<conio.h>

#include<graphics.h>

#include<math.h>

void khoitao()

{

int gd=DETECT,gm;

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

void swap(int &x,int &y)

{

int tam = x;

x = y;

y = tam;

}

void line1(int x1,int y1,int x2,int y2,int color)

{

int x,y,p,step,c1,c2,dx,dy;

if(x1>x2){

swap(x1,x2);

swap(y1,y2);

}

x = x1; y = y1;

dx = x2 -x1;

dy = abs(y1-y2);

step = (y1>y2)?-1:1;

c1 = 2 * dy;

c2 = 2*(dy - dx);

p = 2*dy -dx;

Trang 2

{ putpixel(x,y,color);

if(p<0) p+=c1;

else{ p+=c2;

y+=step;

} }

}

void line2(int x1,int y1,int x2,int y2,int color)

{

int x,y,p,step,c1,c2,dx,dy;

if(y1>y2){

swap(x1,x2);

swap(y1,y2);

}

x = x1; y = y1;

dx = y2 -y1;

dy = abs(x1-x2);

step = (x1>x2)?-1:1;

c1 = 2 * dy;

c2 = 2*(dy - dx);

p = 2*dy -dx;

for(y=y1;y<=y2;y++)

{ putpixel(x,y,color);

if(p<0) p+=c1;

else{ p+=c2;

x+=step;

} }

Trang 3

void line(int x1,int y1,int x2,int y2,int color)

{

x1 = getmaxx()/2+x1;

y1 = getmaxy()/2-y1;

x2 = getmaxx()/2+x2;

y2 = getmaxy()/2-y2;

int dx = abs(x2-x1);

int dy = abs(y1 -y2);

if(dx>dy) line1(x1,y1,x2,y2,color);

else line2(x1,y1,x2,y2,color);

}

void hetoado()

{

int color = 15;

line(0,getmaxy()/2-10,0,10-getmaxy()/2,color);

line(getmaxx()/2+10,0,10-getmaxx()/2,0,color);

}

void tamgiac(int x1,int y1,int x2,int y2,int x3,int y3,int color)

{

line(x1,y1,x2,y2,color);

line(x1,y1,x3,y3,color);

line(x2,y2,x3,y3,color);

}

void quaydiem(int x,int y,int xq,int yq,float goc,int &x1,int &y1)

{

float al = goc*RADS;

x1 = (int)(x*cos(al)-y*sin(al) + (1-cos(al))*xq+sin(al)*yq); y1 = (int)(x*sin(al)+y*cos(al) - sin(al)*xq+(1-cos(al))*yq);

Trang 4

outtextxy(xq+getmaxx()/2,getmaxy()/2-yq,"O tam quay");

}

void quayTG(int x1,int y1,int x2,int y2,int x3,int y3,int xq,int yq,float goc,int color)

{

int x11,y11,x22,y22,x33,y33;

quaydiem(x1,y1,xq,yq,goc,x11,y11);

quaydiem(x2,y2,xq,yq,goc,x22,y22);

quaydiem(x3,y3,xq,yq,goc,x33,y33);

tamgiac(x11,y11,x22,y22,x33,y33,color);

}

void hcn(int x1,int y1,int x2,int y2,int color)

{

line(x1,y1,x1,y2,color);

line(x1,y1,x2,y1,color);

line(x1,y2,x2,y2,color);

line(x2,y2,x2,y1,color);

}

void quayHCN(int x1,int y1,int x2,int y2,int xq,int yq,int goc,int color)

{

int x11,y11,x22,y22,x33,y33,x44,y44;

quaydiem(x1,y1,xq,yq,goc,x11,y11); //a

quaydiem(x2,y1,xq,yq,goc,x22,y22); //b

quaydiem(x2,y2,xq,yq,goc,x33,y33);//c

quaydiem(x1,y2,xq,yq,goc,x44,y44); //d

line(x11,y11,x22,y22,color);

line(x22,y22,x33,y33,color);

line(x33,y33,x44,y44,color);

Trang 5

}

void biendang(int x,int y,float a,float b,int &x1,int &y1)

{

x1 = b*y +x;

y1 = a*x +y;

}

void bdhcn(int x1,int y1,int x2,int y2,float a,float b,int color)

{

int x11,y11,x22,y22,x33,y33,x44,y44;

biendang(x1,y1,a,b,x11,y11); //a

biendang(x2,y1,a,b,x22,y22); //b

biendang(x2,y2,a,b,x33,y33);//c

biendang(x1,y2,a,b,x44,y44); //d

line(x11,y11,x22,y22,color);

line(x22,y22,x33,y33,color);

line(x33,y33,x44,y44,color);

line(x44,y44,x11,y11,color);

}

void bdtg(int x1,int y1,int x2,int y2,int x3,int y3,float a,float b,int color)

{

int x11,y11,x22,y22,x33,y33;

biendang(x1,y1,a,b,x11,y11); //a

biendang(x2,y2,a,b,x22,y22); //b

biendang(x3,y3,a,b,x33,y33);//c

tamgiac(x11,y11,x22,y22,x33,y33,color);

}

Trang 6

void put8pixel(int xc,int yc,int x,int y,int color)

{

putpixel(xc-x,yc-y,color);

putpixel(xc-x,yc+y,color);

putpixel(xc+x,yc-y,color);

putpixel(xc+x,yc+y,color);

putpixel(xc-y,yc-x,color);

putpixel(xc-y,yc+x,color);

putpixel(xc+y,yc-x,color);

putpixel(xc+y,yc+x,color);

}

void tron(int xc,int yc,int r,int color)

{

int x,y,p;

x = 0;

y = r;

p = 3 + 2*r;

xc = getmaxx()/2 +xc;

yc = getmaxy()/2 -yc;

while(x<=y){

put8pixel(xc,yc,x,y,color);

if(p<0) p+=4*x+6;

else{ p+=4*(x-y)+10;

y ;

} x++;

}

}

void to(int x,int y,int mauto,int maubien)

Trang 7

int mauht;

mauht= getpixel(x,y);

if(mauht!=mauto && mauht!=maubien) {

putpixel(x,y,mauto);

to(x-1,y,mauto,maubien);

to(x,y+1,mauto,maubien);

to(x+1,y,mauto,maubien);

to(x,y-1,mauto,maubien);

}

}

void tomau(int x,int y,int mauto,int maubien)

{

x=getmaxx()/2+x;

y=getmaxy()/2-y;

to(x,y,mauto,maubien);

}

void sin()

{

int x1,y1,x2,y2,k;

float step,x,y;

step = 0.0001;

k =20;

x1 = getmaxx()/2;

y1 = getmaxy()/2;

for(x=-10;x<=10;x+=step)

{

y = sin(x);

Trang 8

x2 = x1+ceil(x*k);

y2 = y1+ceil(y*k);

putpixel(x2,y2,4);

}

}

void put4pixel(int xc,int yc,int x,int y,int color)

{

putpixel(xc+x,yc+y,color);

putpixel(xc+x,yc-y,color);

putpixel(xc-x,yc+y,color);

putpixel(xc-x,yc-y,color);

}

void elip(int xc,int yc,int a,int b,int color)

{

xc = getmaxx()/2+xc;

yc = getmaxy()/2-yc;

double z1,z2,p;

int x,y;

x =0;

y=b;

z1 = (double)(b*b)/(a*a);

z2 = (double)1/z1;

p = 2*z1 - 2*b+1;

while(z1*(double)x/y<=1)

{ put4pixel(xc,yc,x,y,color);

if(p<0) p+=2*z1*(2*x+3); else{ p+=2*z1*(2*x+3)+4*(1-y);

y ;

Trang 9

} x++;

}

x = a;

y = 0;

p = 2*z2 - 2*a+1;

while(z2*(double)y/x<=1)

{ put4pixel(xc,yc,x,y,color);

if(p<0) p+=2*z2*(2*y+3);

else{ p+=2*z2*(2*y+3)+4*(1-x);

x ;

} y++;

}

}

void main()

{

clrscr();

int x1=50,y1=20,x2=50,y2=100,x3=100,y3=20,xq = 50, yq = -140; float goc = 100;

khoitao();

hetoado();

tamgiac(x1,y1,x2,y2,x3,y3,5);

tomau((x1+x2+x3)/3,(y1+y2+y3)/3,6,5);

quayTG(x1,y1,x2,y2,x3,y3,xq,yq,goc,2);

bdtg(x1,y1,x2,y2,x3,y3,1,1.6,2);

int a1 = 100,b1=-40,a2 =200,b2 = -80;

Trang 10

quayHCN(a1,b1,a2,b2,xq,yq,120,4); bdhcn(a1,b1,a2,b2,-0.5,-0.8,2);

tron(-100,130,30,4);

tomau(-100,130,2,4);

elip(-200,-100,50,20,5);

tomau(-200,-100,9,5);

sin();

getch();

}

Ngày đăng: 19/11/2014, 17:28

TỪ KHÓA LIÊN QUAN

w