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
Chương trình nguồn :
Câu 1 :
#include
#include
#include
#include
#include
void bresline(int xa,int ya,int xb,int yb)
{int x,y,e,ekt,et,dx,dy,c;
float kt,dy1,dx1;
if(xa>xb) {
int t=xa;
int t1=ya;
xa=xb;
ya=yb;
xb=t;
yb=t1;
}
dx=xb-xa;dy=yb-ya;
dx1=float(dx);
dy1=float(dy);
kt=dy1/dx1;
if(kt>0&&kt<1){
ekt=dy+dy;e=ekt-dx;et=e-dx;
c=getcolor();y=ya;
for(x=xa;x<=xb;x++){
putpixel(x,y,c);
if(e<0) e=ekt+e;
Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT
Trang 9
Báo Cáo Thực Hành Đồ Họa Máy Tính
else {
y++;e=e+et;
}}}
else if(kt>-1&&kt<0){
e=-2*dy-dx;
ekt=-2*dy;
et=-2*dy-2*dx;
c=getcolor();y=ya;
for(x=xa;x
putpixel(x,y,YELLOW);
if(e<0) e=e-2*dy;
else {y--;e=e-2*dy-2*dx;}
}}
else if(kt>1){
e=2*dx-dy;
ekt=2*dx;
et=2*dx-2*dy;
c=getcolor();y=ya;
for(x=xa;y
{
putpixel(x,y,c);
if(e<0) e=e+2*dx;
else{x++;e=e+2*dx-2*dy;}
}}
else if(kt<-1){
e=2*dx+dy;
ekt=2*dx;
et=2*dx+2*dy;}
else if(kt==1){
Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT
Trang 10
Báo Cáo Thực Hành Đồ Họa Máy Tính
y=ya;
c=getcolor();
for(x=xa;x
{
putpixel(x,y,c);y++;
}}
else if(kt==-1){
y=ya;
c=getcolor();
for(x=xa;x
{
putpixel(x,y,c); y--;
}}
else if((xa==xb)){
if(ya>yb) {
int t=ya;
ya=yb;
yb=t;}
c=getcolor();
for(x=xa,y=ya;y
putpixel(x,y,c);}
}
else if((ya==yb)){
if(xa>xb) {
int t=xa;
xa=xb;
xb=t;}
c=getcolor();
for(y=ya,x=xa;x
Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT
Trang 11
Báo Cáo Thực Hành Đồ Họa Máy Tính
{putpixel(x,y,c);}
}}
main(){
int gd=0,gm=0;
initgraph(&gd,&gm,"");
setcolor(WHITE);
bresline(100,100,250,100);
bresline(250,100,250,170);
bresline(100,170,250,170);
bresline(100,100,100,170);
setfillstyle(1,CYAN);
floodfill(105,105,WHITE);
//Mai nha
bresline(100,100,130,70);
bresline(130,70,220,70);
bresline(220,70,250,100);
setfillstyle(1,YELLOW);
floodfill(135,75,WHITE);
getch();
}
Câu 2:
#include
#include
#include
#include "math.h"
void brescircle(int xi,int yi,int R){
int dt,dkt,d,x,y,c;
c=getcolor();d=-2*R+3;
for(x=0,y=R;x<=sqrt(2)/2*R;x++){
Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT
Trang 12
Báo Cáo Thực Hành Đồ Họa Máy Tính
putpixel(x+xi,y+yi,c);
putpixel(-x+xi,y+yi,c);
putpixel(-x+xi,-y+yi,c);
putpixel(y+xi,x+yi,c);
putpixel(x+xi,-y+yi,c);
putpixel(-y+xi,x+yi,c);
putpixel(y+xi,-x+yi,c);
putpixel(-y+xi,-x+yi,c);
if(d<0) d=d+4*x+6;
else {y--;d=d+4*(x-y)+10;}
}
main(){
int gd=0,gm=0,x,y,c=1;
initgraph(&gd,&gm,"");
x=getmaxx()/2;
y=getmaxy()/2;
for(int R=10;R<=200 ;R+=15)
{
setcolor(WHITE);
brescircle(x,y,R);
setfillstyle(1,c+1);
floodfill(x+R-2,y,WHITE);
c++;
if(c==15)c=0;
}
getch();
}
Kết quả Demo
Câu 1:
Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT
Trang 13
Báo Cáo Thực Hành Đồ Họa Máy Tính
Câu 2:
Bài tập 3. Hình học Fractal
Mã nguồn:
Câu 1 :
#include
#include
#include
struct{
float l,t,r,b;
Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT
Trang 14
Báo Cáo Thực Hành Đồ Họa Máy Tính
}w;
struct point{
float x,y;
};
struct code{
int l,t,r,b;
};
code Encode(point p)
{
code c;
c.l = p.x < w.l;
c.t = p.y < w.t;
c.r = p.x > w.r;
c.b = p.y > w.b;
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;
int in1,in2;
float m;
while(1)
Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT
Trang 15