1. Trang chủ >
  2. Công nghệ thông tin >
  3. Lập trình >

PHẦN 2. BÀI TẬP TRÊN LỚP

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.07 MB, 39 trang )


Báo Cáo Thực Hành Đồ Họa Máy Tính



{

putpixel(x,y,c);

}

}

else if(m==-1)

{ //outtextxy(100,100,"Truong hop m==-1");

for(x=x1,y=y1;x<=x2;x++,y--)

putpixel(x,y,c);

}

else if(m<-1)

{ // outtextxy(100,100,"Truong hop m<-1");

ekt=dx+dx;

e=ekt+dy;

et=e+dy;

for (x=x2,y=y2;y<=y1;y++)

{

putpixel(x,y,c);

if (e<0) e+=ekt;

else

{

x--;

e+=et;

}

}

}

else if((m>-1)&&(m<0))

{ //outtextxy(100,100,"Truong hop -1
ekt=-dy-dy;

e=ekt-dx;

et=e-dx;

for (x=x1,y=y1;x<=x2;x++)

{

putpixel(x,y,c);

if (e<0) e+=ekt;

else

{

Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT



Trang 33



Báo Cáo Thực Hành Đồ Họa Máy Tính



y--;

e+=et;

}

}

}

else if (m>1)

{

//outtextxy(100,100,"Truong hop m>1");

e=2*dx-dy;

et=2*dx-2*dy;

ekt=2*dx;

for(x=x1,y=y1;y<=y2;y++)

{

putpixel(x,y,c);

if(e<0) e+=ekt;

else {

x++;

e+=et;

}

}

}

else {

//outtextxy(100,100,"Truong hop 0
ekt=dy+dy;

e=ekt-dx;

et=e-dx;

for(x=x1,y=y1;x<=x2;x++)

{

putpixel(x,y,c);

if(e<0) e+=ekt;

else

{

y++;

e+=et;

}

}

Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT



Trang 34



Báo Cáo Thực Hành Đồ Họa Máy Tính



}

}

}

main()

{

int i;

initwindow(640,480,"WinBGIm");

//ve may nha

veduongthang(70,150,320,50,4);

veduongthang(320,50,570,150,4);

veduongthang(570,150,70,150,4);

//ve khung nha

rectangle(120,150,520,450);

//ve cua chinh

rectangle(170,300,250,450);

//ve khoa cua chinh

circle(240,380,5);

setfillstyle(1,4);

floodfill(240,380,15);

//ve cua so

rectangle(370,200,450,280);

getch();

closegraph( );

}

Kết quả demo



Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT



Trang 35



Báo Cáo Thực Hành Đồ Họa Máy Tính



Bài tập 2.

Viết chương trình thực hiện

-



Nhập tọa độ của P1,P2



-



Vẽ hình chữ nhật w, vẽ đường thẳng P1P2



-



Xén P1P2 vào w



-



Vẽ lại đường thẳng P1P2 với màu khác



-



Vẽ lại đường thẳng P1P2 với màu khác



Mã nguồn

#include

#include

#include

//Thuat toan to mau fill

void fill(int x, int y, int oldcolor, int newcolor)

{

int pc=getpixel(x,y);

if(pc==oldcolor)

{

putpixel(x,y,newcolor);

fill(x-1,y,oldcolor,newcolor);



fill(x,y-1,oldcolor,newcolor);



fill(x+1,y,oldcolor,newcolor);



fill(x,y+1,oldcolor,newcolor);



}

}

// Thuat toan xen hinh

struct { float l, t,r,b;}w;

struct point {float x,y;};

struct code {int l,t,r,b;};

code Encode(point p)

{

Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT



Trang 36



Báo Cáo Thực Hành Đồ Họa Máy Tính



code c;

c.l = p.x>w.l;

c.t = p.y>w.t;

c.r = p.x>w.r;

c.b = p.y
return c;

};

int InW(point p)

{

code c;

c = Encode(p);

return !(c.l||c.t||c.r||c.b);

}

int clip(point &p1, point &p2)

{

point tmpp;

code c1,c2,tmpc;

float m;

int in1,in2;

while(1){

c1= Encode(p1);

c2= Encode(p2);

in1 = InW(p1);;

in2 = InW(p2);

if(in1&&in2) return 1;

if ((c1.l && c2.l)|| (c1.t && c2.t)||(c1.r && c2.r)||(c1.b && c2.b)) return 0;

if(in1){

tmpp = p1; p1 = p2;p2 = tmpp;

tmpc = c2; c1 = c2; c2 = tmpc;

Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT



Trang 37



Báo Cáo Thực Hành Đồ Họa Máy Tính



}

if(p1.x==p2.x){

if(c1.t) p1.y = w.t;

else p1.y = w.b;}

else

{

m= (p2.y - p1.y)/(p2.x - p1.x);

if(c1.l){

p1.y +=m*(w.l - p1.x);

p2.x = w.l;}

else if(c1.t){

p1.x += (w.t - p1.y)/m;

p1.y = w.t;

}

else if(c1.t ){

p1.y +=m*(w.r - p1.x);

p1.x = w.r;

}

else{

p1.x+=(w.b -p1.y)/m;

p1.y = w.b;

}

}}}

main()

{

point p1,p2, p3,p4;

p1.x= 50,p1.y = 300, p2.x= 400, p2.y = 500;

//p3.x= 100,p3.y = 300, p4.x= 500, p4.y = 300;

w; w.l, w.t, w.r, w.b;

Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT



Trang 38



Báo Cáo Thực Hành Đồ Họa Máy Tính



w.l = 100, w.t = 150, w.r = 450, w.b = 450;

int gd=0,gm;

initgraph(&gd,&gm,"");

line ((int)p1.x, (int)p1.y, (int)p2.x, (int)p2.y);

setcolor(9);

rectangle((int)w.l, (int)w.t, (int)w.r, (int)w.b);

setcolor(5) ;

fill(200,400,0,14);

if(clip(p1,p2))

line((int)p1.x, (int)p1.y, (int)p2.x, (int)p2.y);

getchar();

closegraph(); }

Kết quả Demo



Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT



Trang 39



Xem Thêm
Tải bản đầy đủ (.docx) (39 trang)

×