Xây dựng lớp hình học phẳng

Một phần của tài liệu Lập trình hướng đối tượng (Trang 155 - 165)

2.1. Các bớc phân tích và thiết kế

Xây dựng các lớp hình học phẳng để vẽ các hình với kích thớc, mẫu, hình dạng và toạ độ nguyên xác định.

Bớc 1: Xác định các đối tợng:

- Điểm - Đoạn thẳng- Hình chữ nhật- Hình vuông- Hình thang- Hình bình hành

- Hình thoi - Hình tròn - Hình tam giác.

Bớc 2: Lợc đồ mối quan hệ giữa các đối tợng

155 HINH DOANTHANG DIEM HCHUNHAT TAMGIAC HTRON HTHANG HVUONG

Bớc 3: Xây dựng bảng các thành phần lớp và quan

hệ kế thừa

Lớp Dữ liệu thành

phần Hàm thành phần

HINH int x,y ;

// toạ độ vẽ virtual void VE()=0; // ảo thsự virtual void XOA()=0; void CHUYENDI (int dx,int dy) ; void CHUYENDEN (int x2,int y2);

DIEM:HINH int c;

// mầu điểm vẽ

virtual void VE(); virtual void XOA(); DOANTHANG:DIEM int x1,y1;

HCHUNHAT:DIEM int a,b;

// cạnh void VE(); void XOA(); HVUONG:HCHUNHAT (a==b) void VE(); void XOA();

TAMGIAC:DIEM int

x1,y1,x2,y2; void VE(); void XOA();

HTRON:DIEM int r;

//bán kính void VE(); void XOA(); HTHANG:DIEM int a,b,c,d,h; void VE(); void XOA(); BINHHANH:HTHANG (a==b) void VE(); void XOA(); HTHOI:BINHTHANG (c==d) void VE(); void XOA();

* Xây dựng các lớp đối tợng với mối quan hệ (kế thừa) nh đa phân tích, thiết kế.

Vận dụng với một số chơng trình demo - Vẽ 200 đờng tròn mẫu vàng lồng nhau

- Vẽ một chùm 30 tam giác ngẫu nhiên nhng chung đỉnh

- Vẽ một màn hình caro mầu xanh đờng kẻ xanh d- ơng 2.2. Cài đặt trên C++ #include <graphics.h> #include <math.h> #include <iostream.h> #include <conio.h> #include <stdlib.h>

// LOP HINH TONG QUAT //==================== class HINH {

protected:

int x,y; //toa do ve public:

HINH(){x=y=0;}

HINH(int x1,int y1) {x=x1;y=y1;} virtual void VE()=0;

virtual void XOA()=0; void CHUYENDI(int,int); void CHUYENDEN(int,int); };

void HINH::CHUYENDI(int x1,int y1) { XOA();

x+=x1; y+=y1; VE();

}

void HINH::CHUYENDEN(int x1,int y1) { XOA();

x=x1; y=y1; VE();

}

// LOP DIEM <-- HINH

//======================== class DIEM:public HINH {

protected:

int c; //mau sac public:

DIEM():HINH() {c=0;}

DIEM(int x1,int y1,int c1): HINH(x1,y1) { c=c1;} virtual void VE();

virtual void XOA(); }; void DIEM::VE() { putpixel(x,y,c); } void DIEM::XOA() { int k=getbkcolor(); putpixel(x,y,k);

}

// LOP DOANTHANG <-- DIEM

//============================== class DOANTHANG: public DIEM { int x1,y1 ; // toa do diem thu 2 public:

DOANTHANG(): DIEM() {x1=y1=0;}

DOANTHANG(int a1,int b1,int c1,int a2,int b2) : DIEM(a1,b1,c1) {x1=a2,y1=b2;} void VE(); void XOA(); }; void DOANTHANG::VE() { setcolor(c); moveto(x,y); lineto(x1,y1); } void DOANTHANG::XOA() { int k=getbkcolor(); setcolor(k); moveto(x,y); lineto(x1,y1); }

// LOP HCHUNHAT <-- DIEM

//============================= class HCHUNHAT: public DIEM { protected:

int a,b; public:

HCHUNHAT(): DIEM() { a=b=0;}

HCHUNHAT(int x1,int y1,int c1,int a1,int b1) : DIEM(x1,y1,c1) { a=a1; b=b1; } void VE(); void XOA(); }; void HCHUNHAT::VE() { setcolor(c);

rectangle(x,y,x+a,y+b); } void HCHUNHAT::XOA() { int k=getbkcolor(); setcolor(k); rectangle(x,y,x+a,y+b); }

// LOP HVUONG <-- HCHUNHAT //============================== class HVUONG:public HCHUNHAT { public:

HVUONG():HCHUNHAT() {;} HVUONG(int x1,int y1,int c1,int a1):HCHUNHAT(x1,y1,c1,a1,a1) {;}

};

// LOP TAMGIAC <-- DIEM

//=========================== class TAMGIAC:public DIEM {

int x1,y1,x2,y2; public:

TAMGIAC():DIEM() {;}

TAMGIAC(int a1,int b1,int c1,int a2,int b2,int a3,int b3) :DIEM(a1,b1,c1) {x1=a2;y1=b2;x2=a3;y2=b3;} void VE(); void XOA(); }; void TAMGIAC::VE() { setcolor(c);

moveto(x,y); lineto(x1,y1); lineto(x2,y2); lineto(x,y); }

void TAMGIAC::XOA() { int k=getbkcolor(); setcolor(k);

moveto(x,y); lineto(x1,y1); lineto(x2,y2);} // LOP HTRON <-- DIEM

class HTRON: public DIEM { int r;

public:

HTRON(): DIEM() {;}

HTRON(int a1,int b1,int c1,int r1): DIEM(a1,b1,c1) {r=r1;} void VE(); void XOA(); }; void HTRON::VE() { setcolor(c); circle(x,y,r); } void HTRON::XOA() { int k=getbkcolor(); setcolor(k); circle(x,y,c); }

// LOP HTHANG <-- DIEM

//=========================== class HTHANG: public DIEM {

protected: int a,b,c,d,h; public:

HTHANG():DIEM() {;}

HTHANG(int x1,int y1,int m1,int a1,int b1,int c1,int d1,int h1) :DIEM(x1,y1,m1) {a=a1;b=b1;c=c1;d=d1;h=h1;} void VE(); void XOA(); }; void HTHANG::VE() { setcolor(c); moveto(x,y); lineto(x+a,y);

int k=sqrt(d*d-h*h); if (d*d<h*h) cout<<"Error 1 !"<<endl; lineto(x+a+k,y+h);

int k1=sqrt(c*c-h*h); if (c*c<h*h) cout<<"Error 2 !"<<endl; lineto(x-k1,y+h); lineto(x,y); } void HTHANG::XOA() { int co=getbkcolor(); setcolor(co); moveto(x,y); lineto(x+a,y); int k=sqrt(d*d-h*h); lineto(x+a+k,y+h); int k1=sqrt(c*c-h*h); lineto(x-k1,y+h); lineto(x,y); }

// LOP BINHHANH <-- HTHANG //============================== class BINHHANH: public HTHANG { public:

BINHHANH():HTHANG() {;}

BINHHANH(int x1,int y1,int m1,int a1,int c1,int d1,int h1)

:HTHANG(x1,y1,m1,a1,a1,c1,d1,h1) {;} };

// LOP HTHOI <-- HTHANG

//============================== class HTHOI: public HTHANG {

public:

HTHOI():HTHANG() {;}

HTHOI(int x1,int y1,int m1,int a1,int c1,int h1) :HTHANG(x1,y1,m1,a1,a1,c1,c1,h1) {;} };

//========= THE END CLASS ============ const int sh=8;

const int mau=15; const maxx=640;

const maxy=480;

//=============== DEMO =============== void demo1() // ve 200 duong tron long nhau {

int xx,yy,cc;

xx=maxx/2; yy=maxy/2; cc=14;

for(int rr=1;rr<200;rr+=10) {HTRON s(xx,yy,cc,rr); s.VE();} } void demo2() { int xx1,yy1,xx2,yy2,xx3,yy3,cc; xx1=random(100)%maxx; yy1=random(100)%maxy; for(int i=0;i<30;i++) { xx2=(xx1+random(200))%maxx; yy2=(yy1+random(200))%maxy; xx3=(xx2+random(300))%maxx; yy3=(yy2+random(300))%maxy; cc=random(mau);

TAMGIAC tg(xx1,yy1,cc,xx2,yy2,xx3,yy3); tg.VE(); } } void demo3() { int xx,yy; setbkcolor(BLUE); int cc=CYAN; for(yy=0;yy<maxy;yy+=10) {DOANTHANG dt(0,yy,cc,maxx,yy); dt.VE(); } for(xx=0;xx<maxx;xx+=10) {DOANTHANG dt(xx,0,cc,xx,maxy); dt.VE(); } } int main() {

int drive = DETECT, mode;

initgraph(&drive,&mode,"D:\\TC"); demo1();

// demo2(); // demo3();

getch(); closegraph(); return 0;

}// DEMO CAP PHAT BO NHO CHO MANG CAC DOI TUONG void demo0() { int loaih; int xx,yy,cc; randomize(); HINH *H[sh]; int dem=0;

while (dem<20) { dem++; for(int i=0;i<sh;i++) { loaih = random(sh); xx=random(maxx); yy=random(maxy); cc=random(mau); switch(loaih) { case 0: //diem

H[i]=new DIEM(xx,yy,cc); break; case 1: //doan thang

int x2;int y2;

x2=xx+100; y2=yy+200;

H[i]=new DOANTHANG(xx,yy,cc,x2,y2); break;

case 2: //tam giac int x3;int y3;

x3=xx+150; y3=yy+200;

H[i]=new TAMGIAC(xx,yy,cc,x2,y2,x3,y3); break;

case 3: //hinh chu nhat int aa,bb;

aa=random(100); bb=random(200); H[i]=new HCHUNHAT(xx,yy,cc,aa,bb); break;

case 4: //hinh vuong aa=random(100);

H[i]=new HVUONG(xx,yy,cc,aa); break; case 5: //hinh tron

int r=random(200);

H[i]=new HTRON(xx,yy,cc,r); break; case 6: //hinh thang

int cc,dd,hh; aa=random(100); bb=random(200); hh=random(100); cc=hh + random(50); dd=hh + random(50); H[i]=new HTHANG(xx,yy,cc,aa,bb,cc,dd,hh); break;

case 7: //hinh binh hanh

aa=random(200); hh=random(100);

cc= hh + random(50); dd= hh + random(50); H[i]=new BINHHANH(xx,yy,cc,aa,cc,dd,hh); break;

case 8: //hinh thoi

aa=random(200); hh=random(100); cc=hh + random(50);

H[i]=new HTHOI(xx,yy,cc,aa,cc,hh); break; }//switch

H[i]->VE(); }//for

for(i=0;i<sh;i++) {delete H[i];} } //while

}

Một phần của tài liệu Lập trình hướng đối tượng (Trang 155 - 165)

Tải bản đầy đủ (DOC)

(174 trang)
w