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