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
}