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

Bài tập 2. Các thuật toán cơ bản

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



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

×