II. MỘT SỐ KIỂU DỮ LIỆU ĐƯỢC SỬ DỤNG TRONG CHƯƠNG TRÌNH
a. Các đỉnh của đa giác P phẳng được lưu trữ lần lượt trong danh sách kiểu CPoint như P[0].x, P[0].y; P[1].x,P[1].y; …. Với đỉnh cuối được nhận biết bởi chỉ số đa giác kèm theo.
b. Kiểu dữ liệu điểm trong khơng gian ba chiều (3D), được khai báo như sau: typedef struct { long x; long y; long z; } point3d ;
c. Cấu trúc dữ liệu mơ tả Wireframe bao gồm: +Danh sách đỉnh chứa tọa độ các đỉnh
+Danh sách cạnh chứa các cặp đỉnh nối cạnh đĩ. typedef struct { int NumV; int NumE; point3d vert[20]; int edge[30][2]; } Wireframe;
Kiểu dữ liệu dùng để tạo danh sách cạnh từ các đỉnh liên tiếp nhau: typedef struct
{
CPoint A; CPoint B; } TypeListEdge;
Kiểu dữ liệu lưu trữ các điểm, cĩ kèm theo cờ để phân biệt các loại điểm khác nhau (điểm giao nhau giữa 2 đa giác, điểm này đã được duyệt hay chưa duyệt; hay đỉnh của đa giác) được dùng trong thủ tục kiểm tra quan hệ hai đa giác, được khai báo như sau:
typedef struct { CPoint P; int CFlag; } ListPoint; III. CÁCH TỔ CHỨC CÁC HÀM TRONG 2D III. CÁCH TỔ CHỨC CÁC HÀM TRONG 2D
Các hàm được giới thiệu dưới đây được nhĩm lại thành từng nhĩm giúp cho việc theo dõi được dễ dàng hơn
1- Những hàm được sử dụng trong lớp CkiemTra2DView.cpp
Construction/destruction lớp CView CKiemTra2DView:: CKiemTra2DView() CKiemTra2DView:: ~CKiemTra2DView() Các hàm tạo cửa sổ, vẽ của lớp CView
BOOL CKiemTra2DView::PreCreateWindow(CREATESTRUCT& cs) void CKiemTra2DView:: OnDraw(CDC* pDC)// Debug
void CKiemTra2DView::AssertValid() const
void CKiemTra2DView::Dump(CDumpContext& dc) const CTestHHDoc* CKiemTra2DView::GetDocument()
Các hàm phục vụ vẽ trong 2D
void CKiemTra2DView::OnVediem()
void CKiemTra2DView::OnUpdateVediem(CCmdUI* pCmdUI) void CKiemTra2DView::OnVeduongthang1()
void CKiemTra2DView::OnUpdateVeduongthang1(CCmdUI* pCmdUI) void CKiemTra2DView::OnVeduongthang2()
void CKiemTra2DView::OnUpdateVeduongthang1(CCmdUI* pCmdUI) void CKiemTra2DView:: OnVedagiac1()
void CKiemTra2DView::OnUpdateVedagiac1(CCmdUI* pCmdUI) void CKiemTra2DView::OnVedagiac2()
void CKiemTra2DView::OnUpdateVedagiac2(CCmdUI* pCmdUI) Các hàm liên quan đến mouse
void CKiemTra2DView::OnLButtonDown(UINT nFlags, CPoint point) void CKiemTra2DView::OnLButtonUp(UINT nFlags, CPoint point)
void CKiemTra2DView::OnRButtonDown(UINT nFlags, CPoint point) void CKiemTra2DView::OnMouseMove(UINT nFlags, CPoint point) Tính Max ,Min của 2 giá trị(thủ tục tìm giá trị lớn nhất giữa hai giá trị)
int Max(int x, int y) {
int tam;
tam=(x>=y)? x:y; return tam;
}
Các hàm kiểm tra điểm P ở bên trong / bên ngồi đa giác BOOL TestPoint_Boundary (CPoint P,UINT n,CPoint dayP[]) BOOL Giaodiem(CPoint P,UINT n,CPoint dayP[])
void CKiemTra2DView::OnTestDiem() Các hàm kiểm tra quan hệ giữa 2 đường thẳng
double LengthOfSegment(CPoint A,CPoint B) void CKiemTra2DView::OnTinhgoc()
void CKiemTra2DView::OnHinhchieu()
UINT Intersect(CPoint A,CPoint B,CPoint C,CPoint D,CPoint &M) Các hàm kiểm tra quan hệ giữa đoạn thẳng và đa giác
void Trungdiem(CPoint A,CPoint B,CPoint &TDiem)
void ClippingLine(CPoint A,CPoint B,UINT nDinh,CPoint DGiac[], CPoint DsachDcat[],UINT &SoDcat)
void CKiemTra2DView::OnDoanthang_Dagiac() Hàm kiểm tra Đa giác lồi hay lõm?
long Toado(CPoint A, CPoint B)
void CKiemTra2DView:: OnTest2Dagiac() Hàm tính diện tích của đa giác
void CKiemTra2DView::OnTinhdientich()
Nhĩm các hàm cĩ liên quan tới phép chiếu song song và phối cảnh
void InitProjection(double &t1,double &t2,double &t3,double &t4,double &t5,double &t6,double &t7,double &t8,float xRot,float yRot)
void Projection(BOOL PhepChieu ,float xRot,float yRot, Wireframe &WF) void CKiemTra2DView:: OnChieuPhoiCanh()
void CKiemTra2DView::OnUpdateChieuPhoiCanh(CCmdUI* pCmdUI) void CKiemTra2DView:: OnChieuSongSong()
int Min(int x, int y) {
int tam;
tam=(x>=y)? y:x; return tam;
void CKiemTra2DView::OnUpdateChieuSongSong(CCmdUI* pCmdUI) Nhĩm hàm liên quan đến các thao tác của hình lăng trụ
void CKiemTra2DView:: OnLangTru() void CKiemTra2DView::OnChieuLangTru()
void CKiemTra2DView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
Nhĩm hàm liên quan đến các thao tác của hình chĩp void CKiemTra2DView::OnNhapDinhChop() void CKiemTra2DView:: OnChieu_Chop()
Nhĩm hàm liên quan đến các thao tác của hình nĩn void CKiemTra2DView::OnHinhnon()
void CKiemTra2DView::OnChieu_Non() Các hàm kiểm tra tính đồng phẳng của đa giác
void CKiemTra2DView::OnNhapDagiac() void CKiemTra2DView::PlanarPolygon() Tơ màu đa giác
void CKiemTra2DView::OnTomaudagiac() Kiểm tra quan hệ giữa 2 đa giác
void CKiemTra2DView::OnTest2Dagiac()
2- Những hàm được sử dụng trong lớp CKiemTra2DDoc.cpp
CkiemTra2DDoc::CkiemTra2DDoc() CkiemTra2DDoc::~ CkiemTra2DDoc() BOOL CkiemTra2DDoc::OnNewDocument() void CkiemTra2DDoc::Serialize(CArchive& ar)