1. Trang chủ
  2. » Luận Văn - Báo Cáo

Luân văn thiết kế hệ thống kiểm tra các quan hệ hình học trong không gian 2d và 3d

72 141 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 72
Dung lượng 915,27 KB

Nội dung

Luận văn tốt nghiệp LUẬN VĂN TỐT NGHIỆP KHOA CƠNG NGHỆ THÔNG TIN Đề tài: “THIẾT KẾ HỆ THỐNG KIỂM TRA CÁC QUAN HỆ HÌNH HỌC TRONG KHƠNG GIAN 2D 3D“ Thiết kế hệ thống kiểm tra quan hệ hình học trang 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 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 tơi 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ố tố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 q trình học tập, nghiên cứu tơi Nên mặt tinh thần tơi 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ở tốn học rộng lớn, khơng gian diễn dịch vơ hạn, thực ý tưởng tốn học thực được, việc thể thuật tố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 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 …! SINH VIÊN THỰC HIỆN LÊ QUỐC THÁI PHẦN I: GIỚI THIỆU Thiết kế hệ thống kiểm tra quan hệ hình học trang Luận văn tốt nghiệp 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, tơi 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 tơi xin trình bày ví dụ điển sau: Ví du: 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 tố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ơng khó khăn cho người thực đề tài Trong phần nội dung tơi 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 3D“ 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“, tơi 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 đề tơi nghiên cứu thực mơi trường ngơn ngữ Visual C++ Thiết kế hệ thống kiểm tra quan hệ hình học trang Luận văn tốt nghiệp 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++ Ở tơi 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 qt 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 phần tìm hiểu phần thực 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 q trình nghiên cứu, tơi 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 tơi 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 tơi có nhận xét OPENGL ứng dụng để thực chương trình đồ họa 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 tốn học mã nguồn phức tạp 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 Thiết kế hệ thống kiểm tra quan hệ hình học trang Luận văn tốt nghiệp Nhận xét OPENGL tơi thấy OPENGL thư viện đồ họa WINDOWS ta thấy OPENGL khơng 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 CClientDC phần màu sử dụng macro RGB(red,green,blue) Ví du: Để vẽ điểm , ta thực sau: CClientDC dc( this ); dc.SetPixel (100,100,GRB(0,0,0); Để 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); Thiết kế hệ thống kiểm tra quan hệ hình học trang Luận văn tốt nghiệp 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); dc.Rectangle(x1, y1, x2, y2);  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 : Thiết kế hệ thống kiểm tra quan hệ hình học trang Luận văn tốt nghiệp  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  Tham số color cho màu vẽ b Các hàm thư viện OpenGL 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 khơng có 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, tơi trình bày số hàm sử dụng đề tài  Hàm vẽ điểm, đường, đa giác: Thiết kế hệ thống kiểm tra quan hệ hình học trang Luận văn tốt nghiệp Đượ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:  GL_POINTS : đỉnh sử dụng điểm  GL_LINES : đỉnh dùng để tạo đoạn thẳng  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:  glColor3f (Glfloat red, Glfloat green, Glfloat blue); thành phần red, green, blue với giá trị từ 0,0 đến 1,0 Thieát keá hệ thống kiểm tra quan hệ hình học đặt màu hành trang Luận văn tốt nghieäp  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); xác định bề mặt đa giác mặt trước hay sau PHẦN II: NỘI DUNG Trong phần giới thiệu tơi trình bày nội dung sơ lược mang tính tổng quát đề tài Phần nội dung tơi trình bày chi tiết theo thứ tự logic vấn đề từ lý thuyết toán học đến thuật tốn chương trình Thiết kế hệ thống kiểm tra quan hệ hình học trang Luận văn tốt nghiệp I LÝ THUYẾT CƠ SỞ TỐ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 G iớ i th iệ u v ề v e c to r : Đ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: Typedef struct { dx,dy: float; } vector; struct { dx,dy,dz : float; } vector3D P2 x P4 v v P1 P5 Thieát keá hệ thống kiểm tra quan hệ hình P3 học trang 10 y Luận văn tốt nghiệp + Xuất khoảng cách dah End Kiểm tra quan hệ Mặt phẳng - Mặt phẳng Cơ sở toán học thuật giải: Begin - Nhập tọa độ điểm A(xa, ya, za), B(xb, yb, zb ), C(xc, yc, zc) để xác định tọa độ mp(ABC) - Nhập tọa độ điểm M(xm , ym , zm), P(xp , yp , zp ), Q( xq , yq , zq) để xác định tọa độ mặt phẳng mp(MPQ) - Tính tọa độ véc tơ mp( ABC) vector AB = ( xb - xa , yb - ya , zb - za ) vector AC = ( xc - xa , yc - ya , zc - za ) (3 điểm A,B,C tạo thành mp(ABC) nên vector AB không phương với vectơ AC) -Tính tích hữu hướng vector AB, AC n = (AB x AC),n pháp vector mp(ABC) có tọa độ : n = AB x AC = (( yb - ya )*( zc - za ) - ( yc - ya )*( zb - za ), ( zb - za )*( xc - xa ) - ( zc - za )*( xb - xa ), ( xb - xa )*( yc - ya ) - ( xc - xa )*( yb - ya )) Nếu đặt: A = ( yb - ya )*( zc - za ) - ( yc - ya )*( zb - za ) B = ( zb - za )*( xc - xa ) - ( zc - za )*( xb - xa ) C = ( xb - xa )*( ya - yb ) - ( xc - xa )*( xb - xa) D = -xaA - yaB - zaC Phương trình tổng quát mặt phẳng mp(ABC) có dạng: Ax + By + Cz + D = - Tính tọa độ vector mặt phẳng mp(MPQ) : vector MP = ( xp - xm , yp - ym , zp - zm ) vector MQ = (xq - xm , yq - ym , zq - zm ) (3 điểm M, P, Q tạo thành mp(MPQ) nên vector MP không phương với vector MQ) - Tính tích hữu hướng vector MP, MQ m = MP x MQ, m pháp vector mp(MPQ), có tọa độ : m = MP x MQ m = yp -ym zp -zm yq -ym zq -zm , zp -zm xp -xm xp - xm yp - ym zq -zm xq -xm , xq - xm yq - ym Thiết kế hệ thống kiểm tra quan hệ hình học trang 58 Luận văn tốt nghiệp hay viết sau: m = MP x MQ = (( yp - ym )*( zq -zm ) - (yq - ym )*( zp -zm ), ( zp -zm )* (xq - xm ) - ( zq -zm ) *(xp - xm ), (xp - xm )*( yq - ym ) - (xq - xm )*( yp - ym )) Nếu đặt: A1 = (yp - ym )*( zq -zm ) - (yq - ym )*( zp -zm ) B1 = ( zp -zm )* (xq - xm ) - ( zq -zm ) *(xp - xm ) C1 = (xp - xm )*(yp - ym ) - (xq - xm )*( xp - xm) D1 = -xmA1 - ymB1 - zmC1 Phương trình tổng quát mặt phẳng mp(MPQ): mp(MPQ) = A1x + B1y + C1z + D1 = - Xét tương quan mặt phẳng trên:  Nếu (A/A1 = B/B1 = C/C1) xuất kết “Hai mặt phẳng trùng nhau“  Nếu (A/A1 = B/B1 = C/C1 D/D1) xuất kết “Hai mặt phẳng song song với nhau“  Nếu (A/A1 B/B1) (B/B1 C/C1) (A/A1 C/C1) xuất kết “Hai mặt phẳng cắt nhau“ - Hai mặt phẳng mp(ABC) mp(MPQ) cắt theo giao tuyến đường thẳng có phương trình hệ phương trình hai mặt phẳng mp(ABC) mp(MPQ): Ax + By + Cz + D = A1x + B1y + C1z + D1 = - Tính tọa độ giao điểm thuộc giao tuyến:  Nếu (A/A1 B/B1) tọa độ z chọn tuỳ ý cho đơn giản, dùng định thức cấp tìm tọa độ giao tuyến : Ax + By + Cz + D = A1x + B1y + C1z + D1 = Ta tính được: Dx1 = AB2 - A1B Dx1 = B1(-D - Ck1 ) + B( D1 + C1k1 ) Dy1 = A(-D1 – C1k1 ) + A1( D + C1k1 ) Suy ra: X1 = Dx1/ D Y1 = Dy1/ D Z1= k1  Tọa độ I(X1 , Y1 , Z1)  Tìm tọa độ điểm thứ 2: Thiết kế hệ thống kiểm tra quan hệ hình học trang 59 Luận văn tốt nghiệp 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) vng 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  Khoảng cách hai mp(ABC) mp(MPQ) đoạn MH: dmh =|MH | = sqrt ( ( xh - xm)2 + ( yh - ym )2 + ( zh - zm )2 )  Xuất khoảng cách dmh End 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 Thiết kế hệ thống kiểm tra quan hệ hình học trang 60 Luận văn tốt nghiệp 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: - 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 Thiết kế hệ thống kiểm tra quan hệ hình học trang 61 Luận văn tốt nghiệp 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 b Kiểu liệu điểm không gian ba chiều (3D), khai báo sau: 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; Thieát kế hệ thống kiểm tra quan hệ hình học trang 62 Luận văn tốt nghiệp 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 { 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) Thiết kế hệ thống kiểm tra quan hệ hình học trang 63 Luận văn tốt nghiệp 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 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) Thieát keá hệ thống kiểm tra quan hệ hình học trang 64 Luận văn tốt nghiệp void CKiemTra2DView:: OnTest2Dagiac()  Hàm tính diện tích đa giác void CKiemTra2DView::OnTinhdientich()  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() BOOL CkiemTra2DDoc::OnNewDocument() void CkiemTra2DDoc::Serialize(CArchive& ar) Thiết kế hệ thống kiểm tra quan hệ hình học trang 65 Luận văn tốt nghiệp 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)  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() Thiết kế hệ thống kiểm tra quan hệ hình học trang 66 Luận văn tốt nghiệp void CKiemTra3DView:: OnNhapTDDuong2()  Các hàm thực thao tác kiểm tra, tính tố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() void CKiemTra3DView:: Wireframchop() void CKiemTra3DView:: OnCube() void CKiemTra3DView:: Onscence() void CKiemTra3DView:: OnHinhchop() void CkiemTra3Dview:: OnWireframWireframchop()  Hàm thực thao tác xố hình void CKiemTra3DView:: OnClearScreen() 2- Những hàm sử dụng lớp CkiemTra3Ddoc CkiemTra3DDoc:: CkiemTra3DDoc() CkiemTra3DDoc:: ~ CkiemTra3DDoc() BOOL CkiemTra3DDoc:: OnNewDocument() Thiết kế hệ thống kiểm tra quan hệ hình học trang 67 Luận văn tốt nghiệp void CkiemTra3DDoc:: Serialize(CArchive& ar) PHẦN IV: HƯỚNG DẪN SỬ DỤNG CHƯƠNG TRÌNH Trong phần này, tơi đề 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 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 68 Luận văn tốt nghiệp  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 69 Luận văn tốt nghiệp Kiểm tra điểm có đồng phẳng với mặt phẳng hay khơng? Thiết kế hệ thống kiểm tra quan hệ hình học trang 70 Luận văn tốt nghiệp Vẽ vật thể phụ thuộc vào yêu cầu người dùng III Đề nghị hướng phát triển 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 tốn hình học khác Thiết kế hệ thống kiểm tra quan hệ hình học trang 71 Luận văn tốt nghiệp 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 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 1998 [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 Thieát keá hệ thống kiểm tra quan hệ hình học trang 72 ... THIỆU Thiết kế hệ thống kiểm tra quan hệ hình học trang Luận văn tốt nghiệp 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. .. Thiết kế hệ thống kiểm tra quan hệ hình học trang Luận văn tốt nghiệp 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... giác  Kiểm tra đa giác lồi, lõm  Tính diện tích đa giác Thiết kế hệ thống kiểm tra quan hệ hình học trang 24 Luận văn tốt nghiệp II.2 CÁC QUAN HỆ HÌNH HỌC TRONG 3D Các đối tượng hình học bản:

Ngày đăng: 06/05/2018, 23:48

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w