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

PHẦN 1. BÀI TẬP VỀ NHÀ

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



getch();

}

b. Chia miền xác định thành n đoạn bằng nhau, tính giá trị y lại các đầu mút

của các đoạn rồi dùng lệnh lineto(x,y) để vẽ :

#include

#include

#include

#include

#include

main(){

int gd = 0, gm=0,c;

float x,y;

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

setcolor(BLUE);

line(300,50,300,350);

line(100,200,500,200);

moveto(-180/1.5+300,200);

for(int x=-180;x<=180;){

y=20*sin(x*0.017);

lineto(x/1.5+300,y+200);

x=x+2;

setcolor(RED);

}

getch();

}



Kết quả Demo

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



Trang 6



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



Câu a



Câu b



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



Trang 7



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



Bài tập 2.



Các thuật toán cơ bản



Thuật toán :

Câu 1 :

Nhập các thông số cần thiết và tính ∆x, ∆y, m.

Xét các trường hợp :



- Nếu m>1 và m<-1 có điểm chung là thay ∆x, ∆y cho nhau.

- Nếu m<0 thì ∆y = -∆y.

Tính e(Ti), e(Si), e1.

Xét :



- Nếu m>1 hoặc m<-1 lặp điều kiện yA!=yB (y tăng chậm hơn).

o Putpixel(x,y,c).

o Nếu e<0 (ban đầu là e1) thì e+= e(Ti).

o Ngược lại e+=e(Si) và tăng x lên 1 đơn vị



- Nếu m>1 thì tăng y lên 1 và ngược lại giảm y 1 đơn vị.

o Lặp điều kiện xA!=xB (x tăng chậm hơn y).

o Putpixel(x,y,c).

o Nếu e<0 e+=e(Ti).

o Ngược lại e+=e(Si).

o m>0 tăng y.

o m<0 giảm y.

o Tăng x lên 1 đơn vị.

Câu 2 :

Nhập các số cần thiết và tính d.

Lặp nếu x<=y.

setviewport(xo,yo,xo+R,yo+R,0).

Putpixel 8 điểm đối xứng nhau qua tâm O

Nếu d<0 d+=4*x+6.

Ngược lại d+=4*(x-y)+10 và giảm y 1 đơn vị.

Tăng x lên 1 đơn vị.

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



Trang 8



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



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



{

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.)) return 0;

if(in1)

{

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

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

}

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);

p1.x = w.l;

}

else if(c1.t)

{



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



else if(c1.r)

{



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

else{

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

p1.y = w.b;

}



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



Trang 16



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

×