Thiết kế hệ thống kiểm tra các quan hệ hình học

80 270 0
Thiết kế hệ thống kiểm tra các quan hệ hình học

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN OBO OK S CO M Luận văn tốt nghiệp Trong lónh vực công nghệ máy tính công nghệ thông tin có bước phát triển nhảy vọt, hỗ trợ vào lónh vực sống xã hội, sản phẩm công nghệ thông tin biến đổi hàng ngày, hàng Trong lónh vực toán học, sản phẩm công nghệ thông tin hỗ trợ đắc lực cho việc học tập nghiên cứu Đề tài thực là: “THIẾT KẾ HỆ THỐNG KIỂM TRA CÁC QUAN HỆ HÌNH HỌC TRONG KHÔNG GIAN 2D VÀ 3D“ Đề tài sử dụng ngôn ngữ lập trình Visual C++ để thể Về góc độ học tập, nghiên cứu thấy đề tài giúp hiểu rõ thêm kiến thức phần đồ họa máy tính cho vấn đề kiểm tra thực số toán hình học thêm phong phú hơn, tạo thêm phần hấp dẫn môn học Trong thời gian thực đề tài thực yêu cầu đề tài Việc thực đề tài mang ý nghóa đánh giá lại trình học tập, nghiên cứu Nên mặt tinh thần cố gắng tìm hiểu, nghiên cứu, chuẩn bò chu đáo cho việc thực Nhưng tiếp thu có giới hạn đònh, lónh vực máy tính sở toán học rộng lớn, không gian diễn dòch vô hạn, thực ý tưởng toán học thực được, việc thể thuật toán máy tính có vấn đề khó thể thực hiện, đề tài chắn nhiều thiếu sót đònh KIL Mong quý Thầy cô, Anh chò bạn thông cảm, đóng góp ý kiến giúp đỡ Tôi thành thật cảm ơn …! Thiết kế hệ thống kiểm tra quan hệ hình học SINH VIÊN THỰC HIỆN LÊ QUỐC THÁI trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp KIL OBO OKS CO M PHẦN I: GIỚI THIỆU I SƠ LƯC VỀ HỆ THỐNG KIỂM TRA CÁC QUAN HỆ HÌNH HỌC Để cho người đọc tham khảo đề tài “THIẾT KẾ HỆ THỐNG KIỂM TRA CÁC QUAN HỆ HÌNH HỌC“ dễ dàng hình dung được, xin giới thiệu sơ lược đề tài Nhiệm vụ thực đề tài: Thiết kế hệ thống kiểm tra quan hệ hình học trong: Không gian hai chiều (2D) Không gian ba chiều (3D) Với ngôn ngữ thể môi trường Visual C++ Đề tài áp dụng kiến thức sở toán học không gian vector đồ họa máy tính, để xây dựng thuật toán kiểm tra quan hệ hình học Để dễ dàng xin trình bày ví dụ điển sau: Ví dụ: cho đường thẳng a qua hai điểm A B đường thẳng b qua hai điểm C D không gian 2D hay 3D hai đường thẳng có tương quan với nhau, trùng nhau, cắt với góc đó, chéo (trong không gian 3D), hay song song… Sau đưa vào điều kiện giả thiết ban đầu (Input), chương trình thực đưa kết kiểm tra (output) giả thiết hai đường thẳng a b tương quan với nhau? Cắt góc độ, song song, hay trùng Đó mặt thuật toán chương trình kiểm tra, tác vụ thực vấn đề Với toán đưa kết luận với dòng thông điệp thấy đề tài trở nên đơn giản không phong phú hấp dẫn qua ý kiến người đọc tham khảo Một tác vụ đồng thời với toán mà nhiệm vụ đề tài yêu cầu thực đưa vào giả thiết toán chẳng hạn hai điểm A B với tọa độ xác đònh đó, qua hai điểm thực vẽ lên đoạn thẳng qua hai điểm A B Từ thấy vấn đề cách trực quan hơn, hay vẽ góc hai đường thẳng, với thể đề tài trở nên hấp dẫn phong phú hơn, tất nhiên vấn đề khó khăn cho người thực đề tài Thiết kế hệ thống kiểm tra quan hệ hình học trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp Trong phần nội dung trình bày chi tiết đề tài “THIẾT KẾ HỆ THỐNG KIỂM TRA CÁC QUAN HỆ HÌNH HỌC TRONG 2D VÀ 3D“ KIL OBO OKS CO M II GIỚI THIỆU SƠ LƯC NGÔN NGỮ THỂ HIỆN ĐỀ TÀI II.1 SƠ LƯC NGÔN NGỮ Ở phần I giới thiệu sơ lược “THIẾT KẾ HỆ THỐNG KIỂM TRA CÁC QUAN HỆ HÌNH HỌC“, trình bày ví dụ yêu cầu nhiệm vụ để thực tác vụ kiểm tra vấn đề đề tài Để thực vấn đề nghiên cứu thực môi trường ngôn ngữ Visual C++ Visual C++ phần mềm lập trình hướng đối tượng phát triển sở ngôn ngữ lập trình C C++ Ở thể đề tài ngôn ngữ Visual C++ lẽ ngôn ngữ xem ngôn ngữ hỗ trợ (support user) mạnh phổ biến Cùng mục đích sâu xa đề tài sau ngôn ngữ xây dựng ý tưởng đề tài “THIẾT KẾ HỆ THỐNG KIỂM TRA CÁC QUAN HỆ HÌNH HỌC“ ngày thêm đầy đủ, phong phú, hấp dẫn ứng dụng mang tính thiết thực Tôi nghiên cứu tìm hiểu tổng quát ngôn ngữ Visual C++, thực chương trình điển hình ngôn ngữ lập trình hướng đối tượng Và phần tìm hiểu phần thực yêu cầu đề tài, cụ thể phương diện tính toán thuật toán thể trực quan đồ hoạ máy tính ngôn ngữ Visual C++ Trong Visual C++ phần đồ họa thể lớp CDC (Class Device Context) với nhiều hàm thành viên hỗ trợ cho việc vẽ điểm, đường, đa giác, tô màu… Đặc biệt ngôn ngữ Visual C++ có hỗ trợ cho việc vẽ đối tượng hình học chuột Nhưng ngôn ngữ thực với đối tượng hình học 2D, đối tượng hình học 3D chưa có, cần phải tự thiết kế Trong trình nghiên cứu, nhận thấy ngôn ngữ Visual C++ có thư viện OPENGL thư viện API hỗ trợ cho việc thực chương trình đồ họa, 2D 3D mạnh, phần kiểm tra quan hệ hình học phần 3D thực OPENGL Từ chuyển hướng sang nghiên cứu OPENGL để thực cho phần 3D Để hiểu thực khó khăn không ta bắt đầu nghiên cứu làm quen với ngôn ngữ Visual C++ Sau nghiên cứu hiểu yếâu tố OPENGL có nhận xét OPENGL ứng dụng để thực chương trình đồ họa Thiết kế hệ thống kiểm tra quan hệ hình học trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp KIL OBO OKS CO M máy tính hấp dẫn đẹp mắt Khi cài cách sử dụng có phần dễ dàng hơn, cần tìm hiểu số hàm thư viện hàm thành viên OPENGL đáp ứng yêu cầu Còn việc thực cài đặt theo lý thuyết đồ họa máy tính phép biến hình, thiết lập chế độ hình, khởi tạo đồ họa, setviewport, tạo Pallette màu, thiết lập độ sâu hình ảnh, độ phản chiếu hình ảnh, độ tương phản … tất OPENGL hỗ trợ hầu hết OpenGL đònh nghóa “giao diện phần mềm cho phần cứng đồ họa ” Thực chất, OpenGL thư viện hàm đồ họa, xem tiêu chuẩn thiết kế công nghiệp cho đồ họa ba chiều Với giao diện lập trình mạnh mẽ, OpenGL cho phép tạo ứng dụng 3-D phức tạp với độä tinh vi, xác cao, mà người thiết kế đánh vật với núi công thức toán học mã nguồn phức tạp Và OpenGL tiêu chuẩn công nghiệp, ứng dụng tạo từ dùng phần cứng hệ điều hành khác Nhận xét OPENGL thấy OPENGL thư viện đồ họa WINDOWS ta thấy OPENGL thực ngôn ngữ Visual C++ mà cho phép thực Visual Basis , Borland C++ II GIỚI THIỆU CÁC HÀM CỦA NGÔN NGỮ ĐƯC SỬ DỤNG a Các hàm lớp CDC (Class Device Context) Trong CDC có nhiều hàm thành viên phục vụ cho trình kết xuất hình ảnh thiết bò Trong phần thực đề tài, xin đưa hàm sử dụng đề tài Vẽ điểm: SetPixel ( int x , int y , int color ); Hàm thuộc lớp RGB(red,green,blue) CClientDC phần màu sử dụng macro Ví du:ï Để vẽ điểm , ta thực sau: CClientDC dc( this ); Thiết kế hệ thống kiểm tra quan hệ hình học trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp dc.SetPixel (100,100,GRB(0,0,0); KIL OBO OKS CO M Để thể tọa độ điểm hệ trục tọa độ hai chiều, Visual C++ dùng lớp CPoint, đối tượng thuộc lớp thể hai thành phần x y Ví dụ ta khai báo điểm point sau: CPoint point point.x=100; point.y=100; Vẽ đường thẳng: Line (int x1, int y1, int x2, int y2); Hàm thuộc lớp CClientDC Ví dụ: Để vẽ đường thẳng ta thực bước sau CClientDC dc(this); dc.Line(x1,y1,x2,y2); Ngoài việc vẽ đường thẳng sử dụng hai hàm sau: MoveTo(int x, int y); Hàm dùng để di chuyển trỏ đến tọa độ x,y hình LineTo(int x, int y); Hàm dùng để vẽ đường thẳng từ điểm hành đến điểm x, y Cả hai hàm thuộc lớp CClientDC, việc sử dụng sau: CClientDC dc(this); dc.MoveTo(x,y); dc.LineTo(newx, newy); Vẽ hình chữ nhật: Rectangle(int x1,int y1,int x2,int y2); Hàm thuộc lớp CclientDC Dùng để vẽ hình chữ nhật có tọa độ góc trái (x1,y1) tọa độ góc phải (x2,y2) Cú pháp vẽ hình chữ nhật sau: CClientDC dc(this); Thiết kế hệ thống kiểm tra quan hệ hình học trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp dc.Rectangle(x1, y1, x2, y2); KIL OBO OKS CO M Vẽ hình Ellipse: Ellipse(int x1,int y1,intx2,int y2); Hàm có tham tương tự tham số hình chữ nhật, hàm thuộc lớp CClientDC Cú pháp vẽ hình Ellipse sau: CClientDC dc(this); dc.ellipse(int x1, int y1, intx2, int y2); Hàm loan vùng kín: FloodFill(int x,int y, int color); Hàm dùng để tô màu vùng giới hạn đường biên khép kín Hàm thuộc lớp CClientDC có tác dụng tô màu với màu color tô hết vùng có tọa độ (x,y) vùng kín bao quanh điểm Cú pháp hàm sau: CClientDC dc(this); dc.FloodFill(x, y, color); Tạo đường vẽ: CreatePen(typeline, width, color); Để tạo đường vẽ ứng dụng vẽ ta xét hàm CreatePen lớp Cpen, hàm có dạng sau: Cpen *pPen=new Cpen; pPen->CreatePen(typeline, width, color); Trong : • Tham số typeline kiểu đường vẽ, có giá trò đònh nghóa sau: PS-SOLID Đường thẳng đồng PS-DASH Đường thẳng gồm gạch ngang đứt nét PS-DOT Đường thẳng gồm nét chấm đứt PS-DASDOT Đường thẳng gồm gạch ngang chấm đứt PS-DASHDOTDOT Đường thẳng gồm gạch ngang chấm đứt PS-NULL Đường thẳng vô hiệu lực không vẽ PS-INSIDEFRAME Đường thẳng nằm bên đường viền • Tham số width cho độ rộng nét vẽ tính pixel Thiết kế hệ thống kiểm tra quan hệ hình học trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp • Tham số color cho màu vẽ b Các hàm thư viện OpenGL KIL OBO OKS CO M OpenGL gồm hàm, hạt nhân có 115 hàm Tên hàm bắt đầu GL Windows NT hỗ trợ chủng loại hàm khác, bao gồm thư viện OpenGL utility(tên hàm bắt đầu GLU), thư viện OpenGL auxiliary(tên hàm bắt đầu AUX), hàm”WGL” (tên hàm bắt đầu WGL), hàm WIN32 API (tên hàm tiền tố đặc biệt) Bộ hàm hạt nhân cho phép thiết kế hình dạng khác nhau, tạo hiệu chiếu sáng, kết hợp antialiasing gán cấu trúc, thực biến đổi ma trận… Do hàm thể nhiều dạng khác tùy thuộc vào loại liệu mà chúng tiếp nhận, nên thực tế có 300 nguyên mẫu (prototype) hàm Thư viện OpenGL utility gồm hàm cao cấp Các hàm đơn giản hoá việc sử dụng hình ảnh cấu trúc, thực việc biến đổi tọa độ mức cao, hỗ trợ tesselation đa giác, biểu diễn đối tượng có sở đa giác hình cầu, hình trụ hình dóa Thư viện OpenGl auxiliary gồm hàm đặc biệt dùng đơn giản hóa ví dụ lập trình sách dẫn lập trình OpenGL Các hàm phụ thuộc platform thực nhiệm vụ quản ký cửa sổ, điều khiển xuất/nhập, vẽ đối tượng 3D đònh Do hàm có mực đích thiết minh nên không dùng mã sản xuất Các hàm “WGL”kết nối OpenGL với WINdows NT, cho phép người lập trình xây dựng chọn lựa ngữ cảnh biểu diễn, tạo bitmap font, hàm dùng Windows NT Cuối cùng, hàm Win32 API dùng giải đònh dạng điểm ảnh tạo đệm đôi Trong phần này, trình bày số hàm sử dụng đề tài Hàm vẽ điểm, đường, đa giác: Được bắt đầu hàm: glBegin (Glenum mode) Để bắt đầu đỉnh primitive, tham số mode kiểu primitive Tham số mode có giá trò sau: Thiết kế hệ thống kiểm tra quan hệ hình học trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp GL_POINTS : đỉnh sử dụng điểm GL_LINES : đỉnh dùng để tạo đoạn thẳng KIL OBO OKS CO M GL_LINE_STRIP : đỉnh sử dụng tạo đoạn thẳng nhẵn GL_TRIANGLES : đỉnh sử dụng tạo tam giác GL_TRIANGLE_STRIP : đỉnh sử dụng tạo tam giác có cạnh nhẵn GL_POLYGON : đỉnh sử dụng tạo đa giác lồi glEnd ( ) Hàm dùng để chấm dứt danh sách đỉnh mà rõ primitive khởi tạo hàm glBegin Ví du: Vẽ đường thẳng từ điểm glBegin(GL_LINES) glVertex3f(0.0f, 0.0f, 0.0f); glVertex3f(50.0f, 50.0f, 50.0f); glEnd( ); Hàm tọa độ điểm, đường, đa giác: glVertex2f (Glfloat x,Glfloat y) glVertex3f (Glfloat x,Glfloat y,Glfloat z) Hàm biến đổi tọa độ: • glLoadIdentity(); thay ma trận hành ma trận đơn vò • glMultMatrix(); nhân ma trận hành với ma trận đònh • gl PopMatrix(void); lấy ma trận hành từ stack • glPushMatrix(void); đẩy ma trận hành vào stack • glTranslatef (Glfloat x, Glfloat y, Glfloat z); nhân ma trận hành ma trận tònh tiến • gl Rotatef(Glfloat Angle, Glfloat x, Glfloat y, Glfloat z); nhân ma trận hành ma trận quay Các hàm liên quan đến màu: Thiết kế hệ thống kiểm tra quan hệ hình học trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp KIL OBO OKS CO M • glColor3f (Glfloat red, Glfloat green, Glfloat blue); đặt màu hành thành phần red, green, blue với giá trò từ 0,0 đến 1,0 • glClearColor(GLclampf red, GLclamp green, Glclamp blue, Glclamp alpha); đặt màu cho việc xóa buffer màu • glClear(GL_COLOR_BUFFER_BIT); xóa buffer màu, xóa cửa sổ màu xóa hành Các hàm liên quan đến ánh sáng: • glLightf(Glenum light, Glenum pname, GLfloat param); • glLighti(Glenum light, Glenum pname, GLint param); Trong đó: Tham số light nguồn sáng có giá trò từ GL_LIGHT0 đến GL_LIGHT7 Tham số pname tham số light lập GL_AMBIENT, GL_DIFFUSE… Tham số param có ý nghóa nguồn sáng điểm Tham số có giá trò như: GL_SPOT_EXPONENT, GL_SPOT_CUTOFF… Các hàm liên quan đến thuộc tính ánh sáng vật liệu: • glColorMaterialf(Glenum face,Glenum pname, GL float param); • glMateriali(Glenum face,Glenum pname, GL int param); • glMaterialfi(Glenum face,Glenum pname, const Glint* params); • glMaterialfi(Glenum face,Glenum pname, const Glint* params); Trong đó: face: thuộc tính bề mặt trước ,sau đa giác pname: thuộc tính vật liệu: GL_AMBIENT,GL_DIFFUSE,… param : đònh giá trò mà tham số pname lập params: đònh dãy số nguyên hay thực chứa thành phần thuộc tính lập • glFrontFace(Glenum mode); sau xác đònh bề mặt đa giác mặt trước hay Thiết kế hệ thống kiểm tra quan hệ hình học trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp KIL OBO OKS CO M PHẦN II: NỘI DUNG Trong phần giới thiệu trình bày nội dung sơ lược mang tính tổng quát đề tài Phần nội dung trình bày chi tiết theo thứ tự logic vấn đề từ lý thuyết toán học đến thuật toán chương trình I LÝ THUYẾT CƠ SỞ TOÁN HỌC Các lý thuyết sở toán học sử dụng cho thuật toán đề tài “THIẾT KẾ HỆ THỐNG KIỂM TRA CÁC QUAN HỆ HÌNH HỌC“ bao gồm: • Hình học giải tích mặt phẳng • Hình học giải tích không gian Phần lý thuyết sở toán học cần thiết cho việc thiết kế chương trình thực việc kiểm tra quan hệ hình học, không gian vector sở lý thuyết toán học tất yếu để xây dựng cấu trúc đồ họa máy tính I.1 Giới thiệu vector: Điểm (point): Mô tả vò trí đồ hình có nhiều cách để diễn đạt Trong hai chiều biểu diễn cách dùng bộ-2 tọa độ theo hai trục Hai dạng thường áp dụng nhiều dạng Cartesian (x,y) =(3,4) hay dạng tọa độ cực (R, θ)=(2.4,450) Trong chúng đònh nghóa cách đại số theo thao tác đònh đó, chúng cho phép diễn dòch hình học theo điểm, đường, chiều Vector: Nhìn cách hình học, vector đoạn thẳng mà điểm đầu điểm cuối xác đònh Vector đối tượng có độ dài chiều tương ứng với số thực thể vật lý lực, khoảng cách, vận tốc Vector thường vẽ mũi tên có chiều dài hướng Khi vector chọn để đònh hệ tọa độ, vector có hàm số để đưa hai số, ba số, Vì thế, thể vector hai chiều a cặp có thứ tựï a=(a x , a y ) Trong chương trình, vector biểu diễn kiểu liệu: Thiết kế hệ thống kiểm tra quan hệ hình học trang 10 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp Suy ra: Dy1 = A(-D1 – C1k1 ) + A1( D + C1k1 ) KIL OBO OKS CO M X1 = Dx1/ D Y1 = Dy1/ D Z1= k1 ⇒ Tọa độ I(X1 , Y1 , Z1) • Tìm tọa độ điểm thứ 2: Dx2 = AB2 - A1B Dx2 = B1(-D - Ck2 ) + B( D1 + C1k2 ) Dy2 = A(-D1 - C1k2 ) + A1( D + C1k2 ) X2 = Dx2 / D Y2 = Dy2 / D Z2 = k2 ⇒ Tọa độ J(X2 , Y2 , Z2) • Xuất tọa độ điểm thuộc giao tuyến J(X2, Y2 , Z2 ) I(X1, Y1, Z1) - Nếu hai mặt phẳng song song, tính khoảng cách mặt phẳng: • Tìm giao điểm đường thẳng d qua điểm M( xm, ym, zm) vuông góc với mp(ABC), có vector phương pháp vector mp(ABC) vector n=(A,B,C) • Viết phương trình tham số đường thẳng d: X = At + xm Y = Bt + ym Z = Ct + zm • Thay X, Y, Z vào phương trình mặt phẳng mp(ABC): A( At + xm)+B( Bt + ym) + C(Ct + zm) + D = t = -(Axm + Bym + Czm + D ) / ( A2 + B2 + C2 ) • Thay t vào phương trình tham số đườngthẳng d: + Ta có tọa độ điểm cắt H(Xh , Yh, Zh): Xh = A(-(Axd + Byd + Czd + D ) / ( A2 + B2 + C2 ))+ xd Yh = B(-(Axd + Byd + Czd + D ) / ( A2 + B2 + C2 )) + yd Zh = C(-(Axd + Byd + Czd + D ) / ( A2 + B2 + C2 )) + zd Thiết kế hệ thống kiểm tra quan hệ hình học trang 66 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp • Khoảng cách hai mp(ABC) mp(MPQ) đoạn MH: dmh =|MH | = sqrt ( ( xh - xm)2 + ( yh - ym )2 + ( zh - zm )2 ) KIL OBO OKS CO M End • Xuất khoảng cách dmh 9-Kiểm tra tính đồng phẳng đa giác Cơ sở toán học: Đa giác gọi phẳng đỉnh nằm mặt phẳng Trong trường hợp ba đỉnh (không thẳng hàng), dùng để xác đònh mặt phẳng chứa Khi có ba đỉnh, điểm không nằm mặt phẳng Vì ứng dụng phải kiểm tra liệu để bảo đảm tính đồng phẳng Chọn m điểm, gọi P1, làm điểm chốt (pivot) hình thành (m-1) vector chốt Vi=Pi-P1, với i = 2,…, m Các vector nằm mặt phẳng đỉnh Pi nằm mặt phẳng Ta biết ba vector đồng phẳng tích ba vô hướng chúng triệt tiêu.Vì vậy, tạo (m-3) tích ba vô hướng Vi.(V3.V2) với i=4,…., m Nếu tích khác zero đa giác không đồng phẳng Giải thuật: - Tạo danh sách (n-1) vector từ đa giác P có n cạnh - Vòng lặp từ i =3 đến i =n-1 +Tính tích ba vô hướng S= Vi (V1 x V2) + Nếu (S khác 0) Return Đa giác không đồng phẳng - Return Đa giác đồng phẳng 10 -Tính thể tích hình lăng trụ: Giải thuật: Thiết kế hệ thống kiểm tra quan hệ hình học trang 67 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp KIL OBO OKS CO M - Tính S diện tích đa giác đáy - Nhập h, chiều cao hình lăng trụ - Tính thể tích đa giác V = S*h 11- Tính thể tích hình chóp: Giải thuật: - Tính S diện tích đa giác đáy - Nhập h, chiều cao hình chóp - Tính thể tích V= S*h /3 12- Tính thể tích hình nón: Giải thuật: - Nhập R, bán kính đáy hình nón - Nhập h, chiều cao hình nón - Tính thể tích V = S*h / = Pi*R2*h / PHẦN III: THIẾT KẾ CHƯƠNG TRÌNH I THIẾT KẾ GIAO DIỆN THỰC HIỆN KIỂM TRA CÁC QUAN HỆ HÌNH HỌC Thiết kế giao diện cho trình thực ứng dụng việc kiểm tra quan hệ hình học, cập nhật thông số kích thước vùng vùng Client: Lớp CMainFrame : Có chức tạo hình vùng Client Lớp CApp : Có chức thực ứng dụng kiểu đơn tài liệu (SDI) Lớp CView : Có chức hiển thò thực cuả chương trình kiểm tra quan hệ hình học Lớp CDoc : Có chức xử lý việc lưu trữ liệu Lớp CDialog : Có chức nhập, xuất kiện II MỘT SỐ KIỂU DỮ LIỆU ĐƯC SỬ DỤNG TRONG CHƯƠNG TRÌNH a Các đỉnh đa giác P phẳng lưu trữ danh sách kiểu CPoint P[0].x, P[0].y; P[1].x,P[1].y; … Với đỉnh cuối nhận biết số đa giác kèm theo Thiết kế hệ thống kiểm tra quan hệ hình học trang 68 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp b Kiểu liệu điểm không gian ba chiều (3D), khai báo sau: KIL OBO OKS CO M typedef struct { long x; long y; long z; } point3d ; c Cấu trúc liệu mô tả Wireframe bao gồm: +Danh sách đỉnh chứa tọa độ đỉnh +Danh sách cạnh chứa cặp đỉnh nối cạnh typedef struct { int NumV; int NumE; point3d vert[20]; int edge[30][2]; } Wireframe; Kiểu liệu dùng để tạo danh sách cạnh từ đỉnh liên tiếp nhau: typedef struct { CPoint A; CPoint B; } TypeListEdge; Kiểu liệu lưu trữ điểm, có kèm theo cờ để phân biệt loại điểm khác (điểm giao đa giác, điểm duyệt hay chưa duyệt; hay đỉnh đa giác) dùng thủ tục kiểm tra quan hệ hai đa giác, khai báo sau: typedef struct { Thiết kế hệ thống kiểm tra quan hệ hình học trang 69 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp KIL OBO OKS CO M CPoint P; int CFlag; } ListPoint; III CÁCH TỔ CHỨC CÁC HÀM TRONG 2D Các hàm giới thiệu nhóm lại thành nhóm giúp cho việc theo dõi dễ dàng 1- Những hàm sử dụng lớp CkiemTra2DView.cpp Construction/destruction lớp CView CKiemTra2DView:: CKiemTra2DView() CKiemTra2DView:: ~CKiemTra2DView() Các hàm tạo cửa sổ, vẽ 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ẽ 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) Thiết kế hệ thống kiểm tra quan hệ hình học trang 70 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp KIL OBO OKS CO M 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 giá trò(thủ tục tìm giá trò lớn hai giá trò) int Max(int x, int y) { int tam; tam=(x>=y)? x:y; return tam; } int Min(int x, int y) { int tam; tam=(x>=y)? y:x; return tam; } Các hàm kiểm tra điểm P bên / bên đ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ệ đườ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ệ đoạn thẳng đ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 đa giác void CKiemTra2DView::OnTinhdientich() Thiết kế hệ thống kiểm tra quan hệ hình học trang 71 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp KIL OBO OKS CO M Nhóm hàm có liên quan tới phép chiếu song song 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() void CKiemTra2DView::OnUpdateChieuSongSong(CCmdUI* pCmdUI) Nhóm hàm liên quan đến thao tác 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 thao tác hình chóp void CKiemTra2DView::OnNhapDinhChop() void CKiemTra2DView:: OnChieu_Chop() Nhóm hàm liên quan đến thao tác hình nón void CKiemTra2DView::OnHinhnon() void CKiemTra2DView::OnChieu_Non() Các hàm kiểm tra tính đồng phẳng đa giác void CKiemTra2DView::OnNhapDagiac() void CKiemTra2DView::PlanarPolygon() Tô màu đa giác void CKiemTra2DView::OnTomaudagiac() Kiểm tra quan hệ đa giác void CKiemTra2DView::OnTest2Dagiac() 2- Những hàm sử dụng lớp CKiemTra2DDoc.cpp CkiemTra2DDoc::CkiemTra2DDoc() CkiemTra2DDoc::~ CkiemTra2DDoc() Thiết kế hệ thống kiểm tra quan hệ hình học trang 72 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp KIL OBO OKS CO M BOOL CkiemTra2DDoc::OnNewDocument() void CkiemTra2DDoc::Serialize(CArchive& ar) IV CÁCH TỔ CHỨC CÁC HÀM TRONG OPENGL 3D Trong phần kiểm tra 3D, có phương thúc xử lý thao tác sau: 1- Những hàm sử dụng lớp CkiemTra3Dview Construction/destruction lớp CView CKiemTra3DView::CKiemTra3DView() CKiemTra3DView::~CKiemTra3DView() Các hàm tạo cửa sổ, vẽ lớp CView BOOLCKiemTra3DView::PreCreateWindow(CREATESTRUCT& cs) void CKiemTra3DView::OnDraw(CDC* pDC) void CKiemTra3DView::AssertValid() const void CKiemTra3DView::Dump(CDumpContext& dc) const Hàm tạo ngữ cảnh để phù hợp với việc vẽ vật thể 3D int CKiemTra3DView::OnCreate(LPCREATESTRUCT pCreateStruct) Các hàm điều chỉnh kích thước, tạo màu void CKiemTra3DView::OnDestroy() void CKiemTra3DView::OnSize(UINT nType, int cx, int cy) BOOL CKiemTra3DView::OnEraseBkgnd(CDC* pDC) void CKiemTra3DView::GLResize(GLsizei w, GLsizei h) void CKiemTra3DView::GLSetupRC() void CKiemTra3DView::Khoitaopalette() BOOL CKiemTra3DView::OnQueryNewPalette() void CKiemTra3DView::OnPaletteChanged(CWnd* pFocusWnd) Hàm nhấn phím mũi tên để quan sát vật thể void CkiemTra3Dview::OnKeyDown(UINT nChar, UINT nRepCnt, INT Flags) Thiết kế hệ thống kiểm tra quan hệ hình học trang 73 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp KIL OBO OKS CO M Các hàm thực thao tác nhập tọa độ cho mặt phẳng, điểm, đường thẳng void CKiemTra3DView:: OnNhapMPhang1() void CKiemTra3DView:: OnNhapMPhang2() void CKiemTra3DView:: OnNhapTDDiem() void CKiemTra3DView:: OnNhapTDDuong1() void CKiemTra3DView:: OnNhapTDDuong2() Các hàm thực thao tác kiểm tra, tính toán đối tượng điểm, đường thẳng, mặt phẳng void CKiemTra3DView:: OnKtraDiemMP() void CKiemTra3DView:: OnVeGiao2MP() void CKiemTra3DView:: OnKtraDiem_Duong() void CKiemTra3DView:: OnKtra2DThang() void CKiemTra3DView:: OnKtraDuong_MP() void CKiemTra3DView:: OnTinhGoc2MP() void CKiemTra3DView:: OnTinhGocDuong_MP() void CKiemTra3DView:: OnTinhGoc2DT() void CKiemTra3DView:: OnTinhKCDiem_Duong() void CKiemTra3DView:: OnTinhKC2Duong() void CKiemTra3DView:: OnTinhKC2MP() void CKiemTra3DView:: OnDiemDongPhang() void CKiemTra3DView:: Ve_Hai_MP() void CKiemTra3DView:: On2MPhang() void CKiemTra3DView:: GT_hai_mp1() void CKiemTra3DView:: GT_hai_mp3() void CKiemTra3DView:: OnVe_KC_Diem_MP() void CKiemTra3DView:: OnTinh_KC_Diem_MP() void CKiemTra3DView:: Ve_Diem_MP() Các hàm thực việc vẽ, demo vật thể void CKiemTra3DView:: GLRenderScene() void CKiemTra3DView:: Cube() void CKiemTra3DView:: HinhChop() Thiết kế hệ thống kiểm tra quan hệ hình học trang 74 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp KIL OBO OKS CO M void CKiemTra3DView:: Wireframchop() void CKiemTra3DView:: OnCube() void CKiemTra3DView:: Onscence() void CKiemTra3DView:: OnHinhchop() void CkiemTra3Dview:: OnWireframWireframchop() Hàm thực thao tác xoá hình void CKiemTra3DView:: OnClearScreen() 2- Những hàm sử dụng lớp CkiemTra3Ddoc CkiemTra3DDoc:: CkiemTra3DDoc() CkiemTra3DDoc:: ~ CkiemTra3DDoc() BOOL CkiemTra3DDoc:: OnNewDocument() void CkiemTra3DDoc:: Serialize(CArchive& ar) PHẦN IV: HƯỚNG DẪN SỬ DỤNG CHƯƠNG T R Ì NH Trong phần này, đề cập cách sử dụng thao tác việc kiểm tra quan hệ hình học phần 2D 3D I Giao diện phần 2D Màn hình giao diện chương trình, người sử dụng xem thông tin chương trình chọn thao tác kiểm tra 2D 3D Thiết kế hệ thống kiểm tra quan hệ hình học trang 75 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp KIL OBO OKS CO M Giao diện bao gồm thao tác: Kiểm tra 2D Kiểm tra 3D Đề tài Thoát chương trình Màn hình làm việc phần 2D, bao gồm đề mục thao tác 2D, thao tác 3D thao tác xử lý tương ứng Người sử dụng dùng phím Enter hay tổ hợp phím để chọn thao tác phù hợp Trong phần kiểm tra 2D bao gồm đối tượng điểm, đường thẳng, đa giác thao tác kiểm tra tương ứng với đối tượng hình học Thiết kế hệ thống kiểm tra quan hệ hình học trang 76 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp KIL OBO OKS CO M Màn hình làm việc người dùng chọn thao tác kiểm tra đối tượng hình học II Giao diện phần 3D Trong phần 3D, xin giới thiệu số hình ảnh demo chương trình Thiết kế hệ thống kiểm tra quan hệ hình học trang 77 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp KIL OBO OKS CO M Kiểm tra điểm có đồng phẳng với mặt phẳng hay không? Vẽ vật thể phụ thuộc vào yêu cầu người dùng Thiết kế hệ thống kiểm tra quan hệ hình học trang 78 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp III Đề nghò hướng phát triển KIL OBO OKS CO M Tạo thêm chức kích hoạt lại đối tượng hình học thể vùng Client như: • Kéo giản kích thước • Dòch chuyển đối tượng tuỳ ý • Cập nhật lại liệu cho vò trí Từ tương quan đựơc thiết kế đề tài này, xây dựng lên nhiều toán hình học khác TÀI LIỆU THAM KHẢO [1] Lê Tấn Hùng, Huỳnh Quyết Thắng, Kỹ thuật đồ họa, Nhà xuất Khoa Học Kỹ Thuật 2000 [2] Lê Minh Trí, Kỹ lập trình Windows Visual C++ 6.0 (Tập 2), Nhà xuất Thanh Niên 2001 [3] Dương Quang Thiện, Lập trình Windows dùng Visual C++ 5.0 MFC (Tập 1, 3), Nhà xuất Thống Kê 1998 [4] Dương Quang Thiện, Nhập môn lập trình Windows dùng Visual C++, Nhà xuất Thống Kê 1998 Thiết kế hệ thống kiểm tra quan hệ hình học trang 79 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp KIL OBO OKS CO M [5] Trần Quốc Bình, Học Visual C++ 21 ngày, Nhà xuất Mũi Cà Mau [6] FrancisS.Hill,Jr, Computer Graphics, Nhà xuất MacMillan 1990 [7] Richard S Wright, Jr , Michael Sweet, OpenGL SuperBible, Waite Group Press 1996 [8] David J Kruglinski, Inside Visual C++ (Fourth Edition), Microsoft Press 1997 Thiết kế hệ thống kiểm tra quan hệ hình học trang 80 [...]... Đa giác Kiểm tra sự tương quan giữa hai đa giác • Cắt nhau? • Lồng nhau hay rời nhau? • Tính diện tích giao nhau của hai đa giác Kiểm tra đa giác lồi, lõm Tính diện tích của đa giác II.2 CÁC QUAN HỆ HÌNH HỌC TRONG 3D 1 Các đối tượng hình học cơ bản: • Điểm • Đường thẳng • Mặt phẳng 2 Sự tương quan giữa các đối tượng hình học: • Điểm - Đường thẳng Thiết kế hệ thống kiểm tra các quan hệ hình học trang... Đa giác 2 Sự tương quan giữa các đối tượng hình học: • Điểm - Đường thẳng • Điểm - Đa giác • Đường thẳng - Đường thẳng • Đường thẳng - Đa giác • Đa giác - Đa giác Thiết kế hệ thống kiểm tra các quan hệ hình học trang 25 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp KIL OBO OKS CO M 3 Kiểm tra sự tương quan giữa các đối tượng hình học: a Điểm - Đường thẳng Kiểm tra điểm có thuộc... nhau e Mặt phẳng - Mặt phẳng Kiểm tra hai mặt phẳng trùng nhau? Kiểm tra hai mặt phẳng cắt nhau? Kiểm tra hai mặt phẳng song song? Thiết kế hệ thống kiểm tra các quan hệ hình học trang 27 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp KIL OBO OKS CO M Kiểm tra hai mặt phẳng vuông góc? Tính góc giữa hai mặt phẳng nếu hai mặt phẳng cắt nhau Tính khoảng cách giữa hai mặt phẳng nếu... không gian là hệ phương trình bậc nhất 3 biến x, y, z như trên II CÁC ĐỐI TƯNG HÌNH HỌC VÀ SỰ TƯƠNG QUAN Trong phạm vi của môn hình học thì không gian diễn dòch của nó rất lớn, chính vì vậy tôi thiết kế thuật toán trên các đối tượng hình học cơ bản Và từ những thuật toán này chúng ta có thể mở rộng ra cho một diễn dòch rộng lớn hơn II.1 CÁC QUAN HỆ HÌNH HỌC TRONG 2D 1 Các đối tượng hình học cơ bản: •... mặt phẳng III CÁC THUẬT TOÁN KIỂM TRA SỰ TƯƠNG QUAN GIỮA CÁC ĐỐI TƯNG HÌNH HỌC Trong phần này tôi trình bày cách thực hiện một vấn đề, được xây dựng theo logic nhằm mục đích để người đọc hoặc tham khảo có thể dễ dàng kiểm tra so sánh đối chiếu giữa thuật toán với cơ sở toán học III.1 CÁC QUAN HỆ HÌNH HỌC TRONG MẶT PHẲNG (2D) 1 Tính góc giữa hai đường thẳng Cơ sở toán học: Đây là ứng dụng quan trọng của... trình (5) suy ra: (dy - cy) / (dx - cx) = (by - ay) / (bx - ax) Thiết kế hệ thống kiểm tra các quan hệ hình học (6) trang 31 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp KIL OBO OKS CO M Nghóa là các hệ số góc bằng nhau, nên các đường cha song song Nếu các đường cha trùng nhau thì các đoạn cũng có thể trùng nhau Để kiểm điều này, ta xem c có nằm trên đường cha đi qua a và b không... Frame “bao” đa giác Frame bao đa giác là hình chữ nhật nhỏ nhất chứa toàn bộ đa giác Để xác đònh hình chữ nhật này ta lấy min hoặc max các tọa độ đỉnh của đa giác trong hệ tọa Thiết kế hệ thống kiểm tra các quan hệ hình học trang 35 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Luận văn tốt nghiệp độ Descartes rồi tăng, hoặc giảm 1 để đảm bảo hình chữ nhật là hình bao và đa giác hoàn toàn nằm trong... ta hình thành vector c, bằng cách thêm chiều của b c = |c|.ub Sau đó, kết hợp với phương trình (*) trên ta có: c = ( a.ub)ub c = a.b b |b|2 Ví dụ: trong hai chiều, chiếu của a = (6,4) lên b = (1,2) như hình dưới y c e b a x Hình chiếu của c nằm dài hơn b kể từ gốc, từ phương trình trên ta có độ dài của c là (2.8, 5.6), vector e = a-c = (3.2, -1.6 ) Thiết kế hệ thống kiểm tra các quan hệ hình học trang... lẻ (odd - even algorithm) Thuật giải này sử dụng các giao điểm giữa các đường biên của vùng cần tô với các đường thẳng gọi là dòng quét và xác đònh các pixel nào nằm trong vùng tô màu giữa hai giao điểm liên tiếp, đó chính là các pixel dọc theo đường quét nằm giữa hai giao điểm và nằm bên trong đa giác Thiết kế hệ thống kiểm tra các quan hệ hình học trang 34 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC... để kết qủa có độ dài bằng 1 gọi là chuẩn hoá một vector, và kết qủa gọi là vector đơn vò Ví dụ dạng chuẩn hoá ua của a như sau: ua = a / | a| và có cùng chiều với a Biểu thức cho hệ số của vector có thể khai báo trực tiếp như sau: Normalize(vector v, vector &u); Nó có dạng vector đơn vò u do các hệ số mỗi thành phần của v: u.d x := v.d x /Length(v); Thiết kế hệ thống kiểm tra các quan hệ hình học trang ... a = (y b -y a )*(z c -z a ) - (y c -y a )*(z b -z a ) b = (z b -z a )*(x c -x a ) - (z c -z a )*(x b -x a ) c = (x b -x a )*(y c -y a ) - (x c -x a )*(y b-y a ) d = - x a a 1- y a b 1- z a c vector... c-y a )*(z b -z a ), (z b -z a )*(x c -x a ) - (z c -z a )*(x b -x a ), (x b -x a )*(y c -y a ) - (x c -x a )*(y b -y a )) Thiết kế hệ thống kiểm tra quan hệ hình học trang 23 http:/ /kilobooks. com... (bx - ax) * to = cx + (dx - cx ) * uo ay + (by - ay) * to = cy + (dy - cy ) * uo Khử uo, ta được: với (3) D* to = (cx - ax) * (dy - cy ) - (cy - ay) * (dx - cx) (4) D = (bx - ax) * (dy - cy) -

Ngày đăng: 02/12/2015, 12:25

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan