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

Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D

78 819 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 78
Dung lượng 602,5 KB

Nội dung

Tài liệu tham khảo công nghệ thông tin Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D

Trang 1

Trong lĩnh vực công nghệ máy tính cũng như công nghệ thông tin có nhữngbước phát triển nhảy vọt, nó đã hỗ trợ vào mọi lĩnh vực trong cuộc sống xã hội, sảnphẩm của công nghệ thông tin biến đổi hàng ngày, hàng giờ Trong lĩnh vực toánhọc, các sản phẩm của công nghệ thông tin cũng hỗ trợ đắc lực cho việc học tập vànghiên cứu.

Đề tài tôi thực hiện 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ìnhVisual C++ để thể hiện Về góc độ học tập, nghiên cứu tôi thấy đề tài có thể giúphiểu rõ thêm về kiến thức cơ bản của phần đồ họa máy tính và cho vấn đề kiểm trathực hiện một số bài toán hình học thêm phong phú hơn, tạo thêm phần hấp dẫntrong môn học này Trong thời gian thực hiện đề tài tôi đã thực hiện được những yêucầu của đề tài.

Việc thực hiện đề tài còn mang ý nghĩa đánh giá lại quá trình học tập, nghiêncứu của tôi Nên về mặt tinh thần tôi đã cố gắng tìm hiểu, nghiên cứu, và chuẩn bịkhá chu đáo cho việc thực hiện Nhưng sự tiếp thu cũng có những giới hạn nhấtđịnh, bởi trong lĩnh vực máy tính cũng như cơ sở toán học rộng lớn, không gian diễndịch có thể vô hạn, sự thực hiện một ý tưởng nào đó có thể trong toán học thực hiệnđược, nhưng việc thể hiện thuật toán bằng máy tính thì có những vấn đề khó thểthực hiện, vì vậy đề tài chắc chắn còn nhiều thiếu sót nhất định.

Mong quý Thầy cô, Anh chị và các 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

Trang 2

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 TRACÁC QUAN HỆ HÌNH HỌC“ dễ dàng hình dung được, tôi xin giới thiệu sơ lược vềđề tài

Nhiệm vụ thực hiện của đề tài:

Thiết kế hệ thống kiểm tra các 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ể hiện trên môi trường Visual C++

Đề tài áp dụng các kiến thức về cơ sở toán học và không gian vector trong đồhọa máy tính, để xây dựng những thuật toán kiểm tra các quan hệ hình học.

Để dễ dàng hơn tôi xin trình bày một ví dụ điển hình như sau:

Ví dụ: cho đường thẳng a qua hai điểm A và B và đường thẳng b qua hai điểm C

và D trong không gian 2D hay 3D thì hai đường thẳng này cũng có những sự tươngquan với nhau, như trùng nhau, cắt nhau với một góc nào đó, chéo nhau (trongkhông gian 3D), hay song song… Sau khi đưa vào những điều kiện giả thiết ban đầu(Input), thì chương trình thực hiện và đưa ra kết quả kiểm tra (output) của giả thiếttrên là hai đường thẳng a và b đã tương quan như thế nào với nhau? Cắt nhau mộtgóc bao nhiêu độ, song song, hay trùng nhau

Đó là về mặt thuật toán chương trình kiểm tra, đây chỉ mới là một tác vụ thựchiện của vấn đề này Với bài toán như trên nếu chỉ đưa ra được những kết luận vớinhững dòng thông điệp thì chúng ta thấy rằng đề tài trở nên quá đơn giản khôngphong phú và hấp dẫn qua ý kiến của người đọc hoặc tham khảo Một tác vụ cùngđồng thời với bài toán trên mà nhiệm vụ của đề tài yêu cầu thực hiện là khi đưavào giả thiết bài toán chẳng hạn hai điểm A và B với những tọa độ xác định nàođó, qua hai điểm này sẽ thực hiện vẽ lên một đoạn thẳng qua hai điểm A và B Từđó thấy vấn đề một cách trực quan hơn, hay vẽ ra góc giữa hai đường thẳng, chínhvới những thể hiện này đề tài trở nên hấp dẫn phong phú hơn, tất nhiên vấn đề nàykhông ít những khó khăn cho người thực hiện đề tài.

Trong phần nội dung tôi sẽ trình bày chi tiết hơn về đề tài “THIẾT KẾ HỆTHỐNG KIỂM TRA CÁC QUAN HỆ HÌNH HỌC TRONG 2D VÀ 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Ữ

Trang 3

Ở phần I giới thiệu sơ lược về “THIẾT KẾ HỆ THỐNG KIỂM TRA CÁCQUAN HỆ HÌNH HỌC“, tôi đã trình bày một ví dụ về yêu cầu nhiệm vụ để thựchiện một tác vụ kiểm tra vấn đề nào đó của đề tài này Để thực hiện những vấn đềđó tôi nghiên cứu và thực hiện trên môi trường ngôn ngữ Visual C++.

Visual C++ là một phần mềm lập trình hướng đối tượng được phát triển trên cơsở là ngôn ngữ lập trình C và C++ Ở đây tôi thể hiện đề tài trên ngôn ngữ VisualC++ bởi lẽ hiện nay ngôn ngữ này được xem là một trong các ngôn ngữ hỗ trợ(support user) mạnh và phổ biến nhất Cùng mục đích sâu xa hơn nữa là để chonhững đề tài sau này có thể trên cùng ngôn ngữ xây dựng ý tưởng của đề tài“THIẾT KẾ HỆ THỐNG KIỂM TRA CÁC QUAN HỆ HÌNH HỌC“ ngày thêm mộtđầy đủ, phong phú, hấp dẫn và ứng dụng mang tính thiết thực hơn Tôi đầu tiênnghiên cứu tìm hiểu tổng quát về ngôn ngữ như Visual C++, thực hiện nhữngchương trình điển hình trên ngôn ngữ lập trình hướng đối tượng Và phần tìm hiểuchính là phần thực hiện yêu cầu của đề tài, cụ thể là về phương diện tính toán trongnhững thuật toán và thể hiện trực quan bằng đồ hoạ máy tính trên ngôn ngữ VisualC++.

Trong Visual C++ phần đồ họa được thể hiện trong lớp CDC (Class DeviceContext) 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 hơn trong ngôn ngữ Visual C++ có sự hỗ trợ cho việc vẽ các đốitượng hình học bằng chuột Nhưng ngôn ngữ chỉ thực hiện được với các đối tượnghình học 2D, đối tượng hình học 3D thì chưa có, cần phải tự thiết kế.

Trong quá trình nghiên cứu, tôi nhận thấy trong ngôn ngữ Visual C++ có bộ thưviện OPENGL là một thư viện API hỗ trợ cho việc thực hiện các chương trình đồhọa, trên cả 2D và 3D rất mạnh, chính vì thế ở phần kiểm tra các quan hệ hình họcphần 3D tôi thực hiện trên OPENGL Từ đây tôi chuyển hướng sang nghiên cứuOPENGL để thực hiện cho phần 3D Để hiểu và thực hiện được trên nó cũng khókhăn không kém như ta bắt đầu nghiên cứu và làm quen với ngôn ngữ mới nhưVisual C++ Sau khi nghiên cứu và hiểu được những yếâu tố cơ bản của OPENGL tôicó nhận xét rằng OPENGL là một ứng dụng để thực hiện các chương trình đồ họamáy tính hấp dẫn và đẹp mắt Khi đã cài được thì cách sử dụng có phần dễ dànghơn, chỉ cần tìm hiểu một số các hàm trong thư viện các hàm thành viên củaOPENGL là đáp ứng được yêu cầu Còn mọi việc thực hiện cài đặt theo lý thuyếtđồ họa máy tính như các phép biến hình, thiết lập chế độ màn hình, khởi tạo đồhọa, setviewport, tạo các 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 cả do OPENGL hỗ trợ hầu hết.

Trang 4

OpenGL được định nghĩa là “giao diện phần mềm cho phần cứng đồ họa ”.Thực chất, OpenGL là một thư viện các hàm đồ họa, được xem là tiêu chuẩn thiếtkế 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 các ứng dụng 3-D phứctạp với độä tinh vi, chính xác cao, mà người thiết kế không phải đánh vật với các núicông thức toán học và các mã nguồn phức tạp Và do OpenGL là tiêu chuẩn côngnghiệp, các ứng dụng tạo từ nó dùng được trên các phần cứng và hệ điều hành khácnhau.

Nhận xét về OPENGL tôi thấy rằng OPENGL là thư viện đồ họa trênWINDOWS bởi vì ta có thể thấy rằng OPENGL không những thực hiện trên ngônngữ Visual C++ mà còn có thể cho phép thực hiện trên cả Visual Basis , Borland C++

II 2 GIỚI THIỆU CÁC HÀM CỦA NGÔN NGỮ ĐƯỢC SỬ DỤNGa Các hàm của lớp CDC (Class Device Context)

Trong CDC có rất nhiều hàm thành viên phục vụ cho quá trình kết xuất các hìnhảnh ra các thiết bị Trong phần thực hiện đề tài, tôi xin đưa ra các hàm được sử dụngtrong đề tài

Vẽ điểm:

SetPixel ( int x , int y , int color );

Hàm này thuộc lớp CClientDC trong phần màu sử dụng macroRGB(red,green,blue)

Ví du:ï Để vẽ một điểm , ta thực hiện như sau:

CClientDC dc( this );

Để thể hiện tọa độ một điểm trong hệ trục tọa độ hai chiều, Visual C++ dùng lớpCPoint, đối tượng thuộc lớp này được thể hiện bởi hai thành phần x và y Ví dụ takhai báo điểm point như sau:

CPoint pointpoint.x=100;

Trang 5

point.y=100; Vẽ đường thẳng:

Line (int x1, int y1, int x2, int y2);

Hàm này thuộc lớp CClientDC

Ví dụ: Để vẽ đường thẳng ta thực hiện các bước sau đây

CClientDC dc(this);dc.Line(x1,y1,x2,y2);

Ngoài ra trong việc vẽ đường thẳng còn có thể sử dụng hai hàm sau:MoveTo(int x, int y);

Hàm này dùng để di chuyển con trỏ đến tọa độ x,y trong màn hình.LineTo(int x, int y);

Hàm này dùng để vẽ đường thẳng từ điểm hiện hành đến điểm x, y Cả hai hàm này đều thuộc lớp CClientDC, việc sử dụng như 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 này thuộc lớp CclientDC Dùng để vẽ hình chữ nhật có tọa độ trên góc trên tráilà (x1,y1) và tọa độ góc dưới phải là (x2,y2) Cú pháp vẽ hình chữ nhật như sau:

CClientDC dc(this);

dc.Rectangle(x1, y1, x2, y2); Vẽ hình Ellipse:

Ellipse(int x1,int y1,intx2,int y2);

Hàm này có các tham tương tự các tham số hình chữ nhật, hàm này cũng thuộc lớpCClientDC Cú pháp vẽ hình Ellipse như sau:

CClientDC dc(this);

Trang 6

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 này dùng để tô màu vùng được giới hạn bởi một đường biên khép kín Hàm

này 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à một vùng kín bao quanh điểm đó Cú pháp hàm như sau:CClientDC dc(this);

dc.FloodFill(x, y, color); Tạo các đường vẽ:

CreatePen(typeline, width, color);

Để tạo đường vẽ trong các ứng dụng vẽ ta xét hàm CreatePen của lớp Cpen, hàmnày có dạng như sau:

Cpen *pPen=new Cpen;

pPen->CreatePen(typeline, width, color);Trong đó :

 Tham số typeline là kiểu đường vẽ, nó có giá trị được định nghĩa như sau:PS-SOLID Đường thẳng đồng nhất.

PS-DASH Đường thẳng gồm các gạch ngang đứt nét.PS-DOT Đường thẳng gồm các nét chấm đứt.

PS-DASDOT Đường thẳng gồm các gạch ngang chấm đứt.PS-DASHDOTDOT Đường thẳng gồm các gạch ngang chấm đứt.PS-NULL Đường thẳng vô hiệu lực không vẽ ra.

PS-INSIDEFRAME Đường thẳng nằm bên trong đường viền  Tham số width cho độ rộng của nét vẽ tính bằng pixel.

 Tham số color cho màu vẽ

b Các hàm trong bộ thư viện OpenGL

OpenGL gồm 5 bộ hàm, bộ hạt nhân có 115 hàm cơ bản Tên các hàm nàybắt đầu bằng GL Windows NT hỗ trợ 4 chủng loại hàm khác, bao gồm thư việnOpenGL utility(tên hàm bắt đầu bằng GLU), thư viện OpenGL auxiliary(tên hàmbắt đầu bằng AUX), bộ hàm”WGL” (tên hàm bắt đầu bằng WGL), và các hàmWIN32 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ếcác hình dạng khác nhau, tạo các hiệu quả chiếu sáng, kết hợp antialiasing và gáncấu trúc, thực hiện biến đổi ma trận…

Trang 7

Do các hàm cơ bản được thể hiện ở nhiều dạng khác nhau tùy thuộc vào loại dữliệu mà chúng tiếp nhận, nên trên thực tế có hơn 300 nguyên mẫu (prototype) cáchàm cơ bản.

 Thư viện OpenGL utility gồm các hàm cao cấp Các hàm này đơn giảnhoá việc sử dụng hình ảnh cấu trúc, thực hiện việc biến đổi tọa độ mức cao, hỗ trợtesselation đa giác, và biểu diễn các đối tượng có cơ sở đa giác như hình cầu, hìnhtrụ hình dĩa.

 Thư viện OpenGl auxiliary gồm các hàm đặc biệt dùng đơn giản hóa cácví dụ lập trình trong sách chỉ dẫn lập trình OpenGL Các hàm phụ thuộc platformnày thực hiện các nhiệm vụ như quản ký cửa sổ, điều khiển xuất/nhập, vẽ các đốitượng 3D nhất định Do các hàm này có mực đích thiết minh nên không được dùngtrong các 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ậptrình xây dựng và chọn lựa các ngữ cảnh biểu diễn, tạo các bitmap font, các hàmnày chỉ dùng trên Windows NT.

 Cuối cùng, các hàm Win32 API được dùng giải quyết các định dạng điểmảnh và tạo bộ đệm đôi.

Trong phần này, tôi trình bày một số hàm được sử dụng trong đề tài. Hàm vẽ điểm, đường, đa giác:

Được bắt đầu bởi hàm:

glBegin (Glenum mode)

Để chỉ sự bắt đầu những đỉnh của một primitive, tham số mode chỉ kiểu cácprimitive.

Tham số mode có các giá trị sau:

 GL_POINTS : chỉ đỉnh được sử dụng là điểm.

 GL_LINES : chỉ những đỉnh được dùng để tạo đoạn thẳng.

 GL_LINE_STRIP : chỉ những đỉnh được sử dụng tạo đoạn thẳng nhẵn. GL_TRIANGLES : những đỉnh được sử dụng tạo ra những tam giác. GL_TRIANGLE_STRIP : những đỉnh được sử dụng tạo ra tam giác cócạnh nhẵn.

 GL_POLYGON : những đỉnh được sử dụng tạo ra đa giác lồi.

glEnd ( )

Hàm trên dùng để chấm dứt danh sách các đỉnh mà nó chỉ rõ primitive được khởitạo bởi hàm glBegin.

Trang 8

Ví du: Vẽ đường thẳng từ 2 điểm

glVertex3f(0.0f, 0.0f, 0.0f); glVertex3f(50.0f, 50.0f, 50.0f);

glEnd( );

Hàm chỉ ra tọa độ củ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 thế ma trận hiện hành bởi ma trận đơn vị. glMultMatrix(); nhân ma trận hiện hành với ma trận được chỉ định. gl PopMatrix(void); lấy ma trận hiện hành từ stack.

 glPushMatrix(void); đẩy ma trận hiện hành vào stack.

 glTranslatef (Glfloat x, Glfloat y, Glfloat z); nhân ma trận hiện hành bởi matrận tịnh tiến.

 gl Rotatef(Glfloat Angle, Glfloat x, Glfloat y, Glfloat z); nhân ma trận hiệnhành bởi ma trận quay.

Các hàm liên quan đến màu:

 glColor3f (Glfloat red, Glfloat green, Glfloat blue); đặt màu hiện hành bởicác 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ổ bởi màuxóa hiện 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 chỉ ra nguồn sáng có giá trị từ GL_LIGHT0 đếnGL_LIGHT7.

Trang 9

 Tham số pname chỉ ra tham số light nào được lập như GL_AMBIENT,GL_DIFFUSE…

 Tham số param chỉ có ý nghĩa đối với nguồn sáng điểm Tham số này cócá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 của 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: là thuộc tính bề mặt trước ,sau của đa giác.

 pname: là thuộc tính của vật liệu: GL_AMBIENT,GL_DIFFUSE,…  param : chỉ định giá trị mà tham số pname được lập.

 params: chỉ định dãy số nguyên hay thực chứa các thành phần thuộc tính được lập.

 glFrontFace(Glenum mode); xác định bề mặt đa giác là mặt trước haysau.

PHẦN II: NỘI DUNG

Trong phần giới thiệu tôi đã trình bày những nội dung sơ lược mang tính tổngquát của đề tài Phần nội dung tôi trình bày chi tiết hơn theo thứ tự logic các vấn đềtừ lý thuyết toán học đến các thuật toán chương trình.

I LÝ THUYẾT CƠ SỞ TOÁN HỌC

Các lý thuyết cơ sở toán học được sử dụng cho các thuật toán trong đề 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 trong mặt phẳng  Hình học giải tích trong không gian.

Trang 10

Phần lý thuyết cơ sở toán học này rất cần thiết cho việc thiết kế chương trình thựchiện việc kiểm tra các quan hệ hình học, không gian vector là cơ sở lý thuyết toánhọc tất yếu để xây dựng các cấu trúc đồ họa máy tính.

I.1 Giới thiệu về vector:

Điểm (point): Mô tả các vị trí của đồ hình và có nhiều cách để diễn đạt.

Trong hai chiều biểu diễn bằng cách dùng bộ-2 để cho các tọa độ theo hai trục Haidạng thường được áp dụng nhiều đó là dạng Cartesian như (x,y) =(3,4) hay dạng tọađộ cực (R, )=(2.4,450).

Trong khi chúng được định nghĩa một cách đại số theo các thao tác nhất định trênđó, chúng cũng cho phép một diễn dịch hình học theo các điểm, đường, chiều

Vector: Nhìn một cách hình học, vector là một đoạn thẳng mà các điểm đầu

và điểm cuối đã được xác định Vector là một đối tượng có độ dài và chiều tươngứng với một số thực thể vật lý như lực, khoảng cách, và vận tốc Vector thường đượcvẽ như một mũi tên có chiều dài chỉ về một hướng.

Khi vector được chọn để chỉ định hệ tọa độ, các vector có một hàm số để đưa ra haihằng số, ba hằng số, Vì thế, một trong các thể hiện của một vector hai chiều a làmột cặp có thứ tựï a=(ax, ay) Trong chương trình, vector được biểu diễn bằng kiểudữ liệu:

Typedef struct {

dx,dy: float; } vector;

struct

dx,dy,dz : float; } vector3D

5

Trang 11

I.2 Các phép tính vector:

Một vector n chiều, với n là số nguyên dương bất kỳ: W=(W1,W2, .,Wn)

với mỗi thành phần Wi là số vô hướng.

Các vector 2 chiều và 3 chiều với n=2, n=3 thì thường gặp nhất trong đồ hoạ Chúngta không thể thấy được các vector lớn hơn 3 nhưng chúng là những thành phần có giárị rât lớn

Hai phép tính số học cơ bản trên vector là cộng hai vector và định tỷ lệ một vector. Cộng hai vector

Tổng hai vector a,b là vector c được định nghĩa như sau:

C = (c1, c2, …, cn) = (a1 + b1, a2 + b2, …, a n + bn)

Hình a: Các thành phần của tổng là tổng các thành phần của các vector tham gia.

Trang 12

a a-cc

Hình b: Tổng các vector là đường chéo hình bình hành.

Procedure AddVectors( vector a, vector b; vector &c );{

c.dx := a.dx + b.dx;c.dy := a.dy + b.dy;}

Định tỷ lệ một vector

Việc định tỷ lệ một vector nhằm thay đổi độ dài của hay đảo chiều của nó.sa = (sa1, sa2, …, san)

Với s là hệ số tỷ lệ và a là vector Khi s âm, chiều của sa ngược lại với a.Procedure Scalar(real s; vector a; vector &b)

b.dx = sa.dx ;b.d y = sya.d y ;}

Phép trừ hai vector:

Trên cơ sở cộng và định tỷ lệ, phép trừ dễ dàng định nghĩa: a-c = a +(-c)

với thành phần thứ i là ai-ci.

Trị tuyệt đối (độ dài) của vector

Trang 13

Nếu một vector W được thể hiện trong không gian nhiều chiều (W2, W2, …, Wn

), dựa theo định lý Pithagore ta có công thức sau:

 Chuẩn hóa vector -Vector đơn vị

Việc định tỷ lệ một vector để kết qủa có độ dài bằng 1 gọi là chuẩn hoá mộtvector, 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.dx:= v.dx/Length(v);

u.dy:= v.dy/Length(v); Tổ hợp tuyến tính của vector:

Để hình thành tổ hợp tuyến tính của hai vector V và W, định tỷ lệ mỗi vectortheo các tỷ số a và b rồi cộng kết qủa để thành vector mới av+bw

Tổng quát, tổ hợp tuyến tính của m vector V1, V2, …, Vm như sau:

W = a1V1 + a2V2 + …+ amVm

Procedure Combo2D(float a,b vector u,v ,vector &W );{

 Tổ hợp lồi của vector

Trang 14

Một lớp đặc biệt của tổ hợp tuyến tính có vị trí quan trọng trong toán học vàứng dụng số học trong đồ họa, đó là:Tổ hợp lồi (convex combination), hay tổ hợptuyến tính mà các hệ số không âm và tổng bằng 1 Vậy tổ hợp tuyến tính:

W = a1 V1 + a2V2 + … +amVm

là tổ hợp lồi nếu tổng ai =1và ai 0, và cung “spline” thực ra là tổ hợp lồi củamột tập các vector.

Tích vô hướng của hai vector:

Tích vô hướng của hai vector cho ta thông tin đáng giá về một cặp vector như gócgiữa chúng (cụ thể là khi nào chúng vuông góc) và chiếu vector lên vector khác Nócũng cho ta phương trình của một mặt phẳng mô tả bằng một điểm và hai vector.Cho hai vector, ví dụ hai chiều (a1,a2) và (b1,b2).

Tích vô hướng hai vector định nghĩa là: a.b = a1b1+ a2b2

Một cách tổng quát cho vector n chiều như sau: Cho Vector V= (v1, v2, …, vn) vàW=( w1, w2, …, wn), tích vô hướng củahai vector trên là:

Độ dài của hiệu và tổng hai vector được cho như sau:

Trang 15

| a-b|2 = |a|2 - 2ab + |b|2 | a+b|2 = |a|2 + 2ab + |b|2

 Các ứng dụng của tích vô hướng:

a Góc giữa hai vector (hay hai đường)

Đây là ứng dụng quan trọng của tích vô hướng Hình a dưới cho thấy góc giữa hai vector a và b Các vector này có thể có hai, ba, hay nhiều chiều Chúngtạo thành hai cạnh của tam giác, và cạnh thứ ba là a-b Theo hệ thức lượng trongtam giác, ta có :

| a-b|2 = |a|2 + |b|2 - 2 |a||b|cos()Từ phương trình này và phương trình

| a-b|2 = |a|2 - 2ab + |b|2ta suy ra được: a.b = |a||b| cos()

Nghĩa là cos() = ua.ub

Vậy cosin của góc giữa hai vector a và b là tích vô hướng của dạng chuẩn hóahai vector.

 Dấu cuả vector a.b và sự trực giaoTa biết rằng

cos() >0 nếu < 900cos() <0 nếu > 900cos() =0 nếu = 0

bHình a

Trang 16

a.b>0 a.b=0 a.b<0

b Chiếu và phân tích vector:

Hình trên ta phân tích a thành c theo chiều vector b và e Theo cách nàyvector c gọi là chiếu trực giao của a lên b Rõ ràng c có cùng chiều với b, ta cònphải tính độ lớn | c|.

Theo phương trình a.b = |a||b|cos() và hệ thức lượng tam giác ta có phươngtrình:

Trang 17

|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

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àicủa c là (2.8, 5.6), vector e = a-c = (3.2, -1.6 ).

c Dạng điểm chuẩn cho đường và mặt phẳng

Dạng điểm chuẩn cho đường và cho mặt phẳng dùng nhiều trong đồ họa nhưviệc cắt loại bỏ đường bị che và tô đa giác.

Xét đường L đi qua điểm A = (Ax ,Ay) theo chiều vector c = (cx ,cy), ta cóvector n vuông góc với vector c nghĩa là c.n = 0, cũng có nghĩa là cx.n x+ cy.ny=0,hay: cy / cx = -nx / ny

Điều kiện n trực giao với c cho ta suy ra n có thể là bội số bất kỳ của (cx ,cy), có hai chiều đối nhau Để có phương trình cho đường L, xét điểm bất kỳ R =(x,y) trên L Vector R phải vuông góc với n, nên n.(R-A) = 0 Ta có thể viết lại như

xy

Trang 18

sau: nR=nA, nhưng không thể nhân điểm với vector được Ta thay vector R bằng r đitừ gốc và thay A bằng a Như vậy, các tính toán đều phụ thuộc vào việc chọn gốctọa độ, còn phương trình đường thẳng vẫn phụ thuộc vào gốc không có gì thay đổi.Như vậy ta có:

n.r = D Với D = n.a = nx Ax + ny Ay

Đây là phương trình điểm chuẩn cho đường Phương trình này có thể viết dạng quenthuộc như sau:

nxx + nyy = D Mở rộng dạng điểm cho mặt phẳng

Các mặt phẳng cũng có thể biểu diễn ở dạng chuẩn điểm Một mặt phẳnghoàn toàn được xác định với một điểm S = (sx, sy, sz) nằm trong đó và hướng chuẩncủa mặt phẳng Chuẩn cho mặt phẳng được hiểu là vuông góc với mọi đường trongmặt phẳng Gọi hướng chuẩn là n= (nx, ny, nz) Với điểm R= (x, y, z) bất kỳ trongmặt phẳng, xây dựng vector từ R đến S, vuông góc với n.

n.(R-S) = 0Thay R-S bằng r -s và dùng tính tuyến tính, ta được:

n.r = D với D = n.s

Đây là phương trình điểm chuẩn của mặt phẳng Mọi điểm trên mặt phẳng có cùngtích vô hướng với chuẩn Nghĩa là mọi điểm có cùng hình chiếu lên n.

Phương trình mặt phẳng P thường viết là: Ax + By + Cz = D

Tư ø tích vô hướng của phương trình ta thấy rằng dạng điểm chuẩn thực ra là:nxX + nyY + nz Z = D

Với A = nx, B = ny , và C = nz Điều này cho thấy (A, B, C) là chiều chuẩn của mặtphẳng.

Điểm trên mặt gần gốc nhất là điểm chiếu vuông góc của gốc lên mặt Như vậy nótỉ lệ với n, gọi là Kn, nên khoảng cách là| Kn | Vì Kn nằm trên mặt nên n (Kn)=D.

n

Trang 19

d Kiểm tra nửa không gian trong và ngoài của một điểm

Xét điểm Q, giả sử đường E đi qua điểm A và có chuẩn hướng ra n như hình vẽ:

Góc  giữa n và

Q -A < 900, nếu Q nằm phía ngoài, vì vậy tích n.(Q - A) > 0 Tương tự, góc  sẽ lớnhơn 900 nếu Q nằm phía trong, vì vậy n.(Q -A) < 0 Cuối cùng, = 900 nếu Q nằmtrên E, và n (Q - A) = 0 Nếu thay Q -A bằng vector q - a và gọi đặt a.n = D, thìđường E được cho bởi phương trình n.p = D, và ta viết lại thủ tục kiểm tra điểm Qvới vector biểu diễn q sẽ nằm:

1 Ở nửa không gian phía ngoài của E nếu q.n > D.2 Trên E nếu p.n = D.

3 Ở nửa không gian phía trong của E nếu q.n < D. Mở rộng cho mặt phẳng

Giả sử mặt P qua điểm A và có vector chuẩn hướng ra n thì điểm Q sẽ:1 Ở nửa không gian phía ngoài của P nếu T=(q-a).n > 02 Trên P nếu (q-a).n=0

3 Ở nửa không gian phía trong của P nếu (q-a).n<0.

e Cắt đường thẳng với cửa sổ lồi

Ta dùng kiểm tra trong-ngoài để xây dựng công cụ cắt hữu hiệu với cửa sổ là đagiác lồi bất kỳ Cửa sổ W chứa một đa giác lồi cùng với đường thẳng L từ P1 tới P2.Ta muốn xác định phần thấy của L nằm trong W Đa giác lồi nên phần trong cửa sổđược định nghĩa là vùng nằm ở nửa không gian phía trong của mỗi cạnh của W.Đoạn L được kiểm tra đối với mỗi cạnh của W, và phần nằm ở nửa không gian phía

Trang 21

 E song song L: nếu n trực giao với c (nghĩa là: n c= 0) Như vậy L sẽ nằm

hoàn toàn ở trong hoặc ở ngoài cửa sổ Để xét tiếp, chọn điểm bất kỳ trên L, là P1và kiểm tra trong-ngoài Đặt p1= P1 - 0 là vector từ gốc tọa độ đến P1 L sẽ hoàntoàn nằm trong nếu:

p1.n < DNgược lại L hoàn toàn nằm ngoài.

 E không song song với L: L phải cắt cạnh E tại ti, để tính ti dùng phương

ti=( D - n.p1 ) /n.c

Nếu chiều c của nó nhỏ hơn 900 kể từ n ( n.c > 0) thì đường sẽ đi ra Ngược

lại sẽ đi vào Nếu đi vào, thì phần với t < ti sẽ không thấy được, và tin được gán làti(nếu tin< ti) Ngược lại, thì phần với t > ti sẽ không thấy được, và t out được giảmvề ti(nếu ti < tout) Khi kết thúc, giá trị của tin và tout sẽ được thay vào P1+ ct, đểcó được các điểm đầu của đường bị cắt.

 Tích hai vector

Tích vector của hai vector là một vector Một trong nhiều tính chất hữu dụng củanó là nó trực giao với hai vector ban đầu Tích vector chỉ được định nghĩa cho vectorba chiều, nhưng nó cũng áp dụng trong một số vấn đề trong đồ họa liên quan đến đagiác hai chiều.

Cho vector a=(ax, ay, az) và b=(bx, by, bz) tích vector của chúng viết là a x b Nóđược định nghĩa theo các vector đơn vị chuẩn i, j, k như sau:

a x b = (ay.bz - az.by).i + (az.bx - ax.bz).j + (ax.by - aybx).k Từ định nghĩa suy ra các tính chất đại số sau:

1 i x j = kj x k = ii x k = j

2 a x b = -b x b

Trang 22

3 a x (b + c) = a x b +a x c4 (sa) x b = s(a xb)

 Ý nghĩa hình học của tích vector:

1 ax b trực giao với cả a và b.

2 Độ dài a x b bằng diện tích hình bình hành xác định bởi a và b.Diện tích này là:

 Tích bộ ba vô hướng

Cho ba vector a, b, c kết hợp chúng cho ra số vô hướng như sau:

S = a.(b x c) = ax (bycz -bzcy) + ay(bz cx - bxcz ) + az (bxcy - bycx).Ta co:ù S = a.(b x c) = b.(c x a) = c.(a x b)

Tích bộ ba vô hướng có ý nghĩa hình học đơn giản Giá trị của nó là thể tích của khốilăng trụ tạo bởi các vector a,b, c Dấu của tích bộ ba vô hướng tùy theo

cos () dương nếu  < 900 và âm nếu  > 900.

 Phương trình mặt phẳng

a x b

Thể tích a x b x c

Trang 23

Trong không gian, qua 3 điểm A (xa, ya, za), B(xb, yb, zb), và C(xc, Yc, zc) khôngthẳng hàng xác định được phương trình mặt phẳng như sau:

Ta có vector AB = (xb-xa, yb-ya, zb-za) và AC = (xc-xa, yc-ya, zc-za)

Tích hữu hướng của hai vector AB và AC là pháp vector n của mặt phẳng mp(ABC).Vector n có tọa độ như sau:

n = ((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 chúng ta đặt:

a1 = (yb-ya)*(zc-za) - (yc-ya)*(zb-za)b1 = (zb-za)*(xc-xa) - (zc-za)*(xb-xa)c1= (xb-xa)*(yc-ya) - (xc-xa)*(yb-ya)d1 = - xaa1- ya b1- za c1

thì vector n có thể viết lại như sau: n = (a1, b1, c1)

Phương trình mặt phẳng được xác định theo định thức cấp 3 như sau:

Phương trình mặt phẳng mp(ABC) ở dạng tổng quát:a1X + b1Y+ c1Z + d1= 0 Phương trình đường thẳng

x-x x-x x-xy-y y-y y-y

z-z z-z z-z = 0

Trang 24

Trong không gian cho hai điểm A (xa , ya , za), B(xb , yb , zb) sẽ xác định đượcphương trình đường thẳng đi qua hai điểm A ,B như sau:

Vector AB = (xb - xa , yb - ya , zb -za ) là vector chỉ phương của đường thẳng qua haiđiểm A, B (để gọn hơn ta viết vector chỉ phương AB=(a1, a2, a3), phương trình củađường thẳng có ba dạng như sau:

 Phương trình tham số:

X = a1t + xa

Y = a2t + ya Z = a3t + ya

 Phương trình dạng chính tắc:1

axXa

=

ayYa

=

azZa

(với điều kiện a1, a2, a3 <> 0 ) Phương trình dạng tổng quát:

a2(x - xa ) = a1( y - ya )a1(z - za ) = a3( x - xa )Hệ phương trình trên tương đương với hệ phương trình sau:

a2x - a1y + 0 + a1ya- a2xa = 0a3x + 0 - a1z + a1za - a3xa = 0

Phương trình tổng quát của đường thẳng qua 2 điểm trong không gian là hệ phươngtrì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ậttoá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:

Trang 25

 Điểm

Đường thẳng

 Đ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.

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 đường thẳng?

 Tính khoảng cách từ điểm đến đường thẳng nếu điểm khôngthuộc đường thẳng.

b Điểm - Đa giác

 Kiểm tra điểm bên trong hay bên ngoài đa giác?.c Đường thẳng - Đường thẳng

 Kiểm tra hai đường thẳng trùng nhau, cắt nhau hay songsong.

 Tính góc giữa hai đường thẳng.

 Tính hình chiếu của đoạn thẳng trên đường thẳng.d Đường thẳng - Đa giác

 Kiểm tra đường thẳng nằm bên trong hay bên ngoài đa giác. Clip một đoạn thẳng vào đa giác.

e Đa giác - Đ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.

Trang 26

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  Điểm - Mặt phẳng

 Đường thẳng - Đường thẳng. Đường thẳng - Mặt phẳng. Mặt phẳng - Mặt phẳng.

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 đường thẳng?

 Tính khoảng cách từ điểm đến đường thẳng nếu điểm khôngthuộc đường thẳng.

b Điểm - Mặt phẳng

 Kiểm tra điểm có thuộc mặt phẳng?

 Tính khoảng cách từ điểm đến mặt phẳng nếu điểm khôngthuộc mặt phẳng.

c Đường thẳng - Đường thẳng

 Kiểm tra hai đường thẳng đồng phẳng, cắt, song song, chéonhau, vuông góc?

 Tính góc giữa hai đường thẳng.

 Tính khoảng cách giữa hai đường thẳng chéo nhau. Tính hình chiếu của đoạn thẳng trên đường thẳng.d Đường thẳng - Mặt phẳng

 Kiểm tra đường thẳng thuộc mặt phẳng?  Kiểm tra đường thẳng vàø mặt phẳng cắt nhau?  Kiểm tra đường thẳng và mặt phẳng song song?

Trang 27

 Kiểm tra đường thẳng và mặt phẳng vuông góc?

 Tính góc giữa đường thẳng và mặt phẳng nếu đường thẳng vàmặt phẳng cắt nhau.

 Tính khoảng cách giữa đường thẳng và mặt phẳng nếu đườngthẳng và mặt phẳng song song 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?  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 hai mặt phẳng

song song nhau.

 Tìm giao điểm của hai 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 theologic 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 tích vô hướng Hình a dưới cho thấy góc giữa hai vector a và b Chúng tạo thành hai cạnh của tam giác, và cạnh thứ ba là a-b.

a-b

Trang 28

Từ định nghĩa tích vô hướng của vector a a1,a2ø và b (b1,b2)là a.b= |a||b| cos( ) với  :góc giữa vector a và vector b

Và từ biểu thức giải tích của tích vô hướng:

a.b = a1 b1+ a2 b2Ta có cos( ) =a.b / |a||b|=a 1b1 a2b2/ ( )( 2)

- Cos ()= a.b / |a| |b|

- Góc 2 đoạn thẳng Alpha= arcos(cos())

2 Tìm hình chiếu của đoạn thẳng AB lên đường thẳng b

Cơ sở toán học:

Để tính hình chiếu đoạn AB lên đường thẳng b đi qua C và D, ta tìmhình chiếu của điểm A là A’ và B là B’ trên đường thẳng b Đoạn A’B’ chính là hìnhchiếu của AB trên đường b.

 Xác định PT đi qua 2 điểm C, D:

ax + by + c = 0

có vector chỉ phương VCF = (xD-xC , yD-yC ) = (-b, a) và c = - a * xC - b * yC. Xác định PT đường thẳng  đi qua điểm A và vuông góc với CD:

bx -ay + c’ = 0có vector chỉ phương của  =(a, b)

Trang 29

Phương trình đường thẳng đi qua CD

Và Phương trình đường thẳng ’ đi qua B và vuông góc với CD

- Tìm giao điểm A’của đường 1 và đường qua C, D

- Tìm giao điểm B’ của đường 2 đi qua điểm B và vuông góc vớiđường thẳng CD.

- Khi đó A’B’ chính là hình chiếu của AB.

3 Xác định giao điểm giữa hai đoạn thẳng

Cơ sở toán học:

Cho hai đoạn thẳng, xác định chúng có cắt nhau không, nếu có tìm giaođiểm.Giả sử đường 1 từ a đến b và đường 2 từ c đến d như trong hình vẽ, hai đoạnthẳng có thể bố trí theo nhiều cách khác nhau.

b

Trang 30

Phương trình tham số cho mỗi đường như sau:x1 (t) = ax + (bx - ax) * t

y1 (t) = ay + (by - ay) * t và

x2 (u) = cx + (dx - cx) * u

y2 (u) = cy + (dy - cy) * u Ta gọi các đường thẳng chứa các đoạn thẳng ab và cd là các đường cha, đây là cácđường vô hạn Trước hết, ta xét hai đường “cha” có giao nhau không, sau đó xemgiao điểm có thuộc cả hai đoạn thẳng không? Nếu các đường “cha’ giao nhau, ta cógiá trị to và uo sao cho:

x1 (to) = x2(uo) và y1(to) =y2(uo) Từ đây, ta có các phương trình sau:

ax + (bx - ax) * to = cx + (dx - cx ) * uoay + (by - ay) * to = cy + (dy - cy ) * uo Khử uo, ta được:

D* to = (cx - ax) * (dy - cy ) - (cy - ay) * (dx - cx) với D = (bx - ax) * (dy - cy) - ( by - ay) * (dx - cx)

Có hai trường hợp cơ bản, D bằng hay khác 0. D khác zero

Nếu D khác 0, ta tính to từ phương trình (4) Nếu to nằm ngoài đoạn [0, 1] thìkhông có giao điểm giữa hai đoạn Ngược lại, thì có thể có giao điểm, thay to vào (3)để tính uo Nếu uo nằm trong đoạn [0, 1] thì chắc chắn có giao điểm, và dùng phươngtrình (1) và (2) để tính.

 D bằng zero

(4)(5)

Trang 31

Nếu D bằng 0, từ phương trình (5) suy ra:

(dy - cy) / (dx - cx) = (by - ay) / (bx - ax) 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, taxem c có nằm trên đường cha đi qua a và b không Dựa vào phương trình của đườngcha là:

(bx - ax) * (y - ay) - (by - ay) * (x - ax) = 0

thay cx cho x và cy cho y và xem vế trái có đủ gần 0 không (nghĩa là: nhỏ hơn lượngnào đó, như 10 - 5) Nếu không, các đường cha không trùng nhau, và không có

giao điểm Nếu thỏa mãn thì phải thực hiện bước kiểm cuối cùng để xem các đoạncó trùng nhau không.

Từ phương trình (1) tìm haigiá trị tc và td mà đường đạt tới vị trí c và d Vì cácđường cha trùng nhau, ta chỉ cần dùng thành phần x (nếu đường 1 thẳng đứng, thìdùng thành phần y), và thay cx và dx, ta có :

tc = (cx - ax) / (bx - ax)

td = (dx - ax) / (bx - ax)

Đường 1 bắt đầu tại 0 và kết thúc tại 1, và xét thứ tự của bốn giá trị 0, 1, tc vàtd, ta xác định được vị trí tương đối của hai đường Sẽ chồng nhau trừ khi cả hai tc vàtd nhỏ hơn 0 hay lớn hơn 1 Nếu có trùng nhau, ta dễ dàng xác định các điểm đầutrùng nhau từ tc và td.

Giải thuật được xây dựng trong thủ tục Intersect (), gồm các tham số là bốnđiểm đầu của các đường, giá trị trả về có thể có thể có các giá trị sau:

 1: có một giao điểm. 2: không giao nhau.

 3: các đoạn thẳng song song nhau. 4: hai đoạn thẳng chồng nhau.

 5: hai đoạn thẳng cùng nằm trên 1 đường thẳng, không cắt nhau.(6)

(8)

Trang 32

Giải thuật:

-Tính Mẫu số D;-Nếu D < > 0

Nếu c nằm trên đoạn ab + Tính tc, td;

+ Nếu không phải cả tc và td < 0 hoặc cả tc, td >1 Return 4; (2 doạn thẳng chồng nhau)+ Ngược lại,

Return 5; (2đoạn thẳng nằm trên 1 đườngthẳng và không cắt nhau)

Ngược lại, Return 3; (2 đoạn thẳng song song )

4 Vẽ đa giác (Polygon)

Cơ sở toán học:

Đa giác là tập hợp các đoạn thẳng liên tiếp cùng nằm trong mặt phẳngkhép kín Một đa giác có ít nhất 3 cạnh Như vậy, đa giác đơn giản nhất là tam giác.

Giải thuật:

- Xuất phát từ đỉnh đầu tiên

- Vẽ nối đến đỉnh kế tiếp theo thứ tự cùng chiều kim đồng hồ.- Vẽ nối từ đỉnh cuối cùng đến đỉnh đầu tiên.

Trang 33

5 Vẽ n-giác

Cơ sở toán học:

Một n-giác là đa giác quy tắc có N cạnh (đa giác quy tắc: đa giác mà mọicạnh có độ dài bằng nhau, và các cạnh kề nhau tạo nên những góc trong bằng nhau).Nếu cho đỉnh đầu tiên trên trục x tại (R, x) Cho góc A bất kỳ, vị trí (x,y) của mộtđiểm trên đường tròn có góc A sẽ được tính (x,y) = (R cos(A), R sin(A)) Và đỉnhthứ i, Vi, của n -giác nằm ở góc 2 (i -1) / N và có vị trí:

6 Tô màu đa giác

Cơ sở toán học:

Phương pháp hiển thị các vùng được tô màu trong đồ họa máy tính làquá trình xác định các pixel tương ứng thuộc vùng tô màu cho nó Có nhiều thuậttoán đã được nghiên cứu và phát triển cho việc hiển thị các vùng được tô màu trênmàn hình, một trong những thuật toán đó là tô màu theo vết dầu loang, một thuậttoán khác là tô màu theo dòng quét Ở đây ta dùng phương pháp tô màu theo dòngquét (scan-line algorithm) hay còn gọi là giải thuật tô màu chẵn lẻ (odd - evenalgorithm).

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ằmgiữa hai giao điểm và nằm bên trong đa giác.

Trang 34

Ở mỗi điểm giao dòng quét chuyển đổi hoặc đi vào hoặc đi ra khỏi đa giác, đólà sự thay đổi parity của điểm đó Nếu dòng quét đi vào trong đa giác nhữngpixels tiếp theo sẽ được tô, nếu đi ra ngoài những pixels tiếp theo sẽ không đượctô.

Khi dòng quét đi qua một đỉnh P của đa giác (chính là giao điểm của 2 cạnhcủa đa giác) nó tạo ra 2 giao điểm, mỗi điểm với 1 cạnh của đa giác đi qua đỉnh đó,nếu đỉnh ở giá trị cực (local extremum) Pixels ở bên trái và bên phải của đỉnh đó sẽcó cùng parity, nhưng nếu đỉnh không ở giá trị cực các Pixels ở bên trái và bên phảicủa đỉnh đó sẽ có parity ngược nhau, do đó ta cần có một xử lý đặc biệt hơn.

 Nếu P là giao điểm của hai cạnh có hướng y ngược nhau (một cạnh có giá trịy tăng,một cạnh có giá trị y giảm - Scan Line 1) thì dòng quét có 2 điểm giao.

 Nếu P là giao điểm của hai cạnh có hướng y trùng nhau (hai cạnh đều có giátrị y cùng tăng hay giảm - Scan Line 2) thì dòng quét có 1 điểm giao.

Trước khi tô màu, ta cần kiểm tra mỗi đỉnh đa giác Nếu y của nó không là giá trịcực trị(local extremum), như trong scan line 2 Vì những Pixels đối với bên trái vàphải của đỉnh đó khác parity, khác giá trị kiểm tra inside-outside; ta phải làm ngắnmột trong hai cạnh đi một chút (giảm y của đầu cạnh đó một pixel).

Đối với cạnh nằm ngang trong đa giác không cần đưa vào tập các cạnh của đa giácđể xử lý.

Giải thuật:

Bước 1: Xác định 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độ 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áchoàn toàn nằm trong nó.

Scan line 1

Scan Line 2

Trang 35

Bước 2: Xác định danh sách các cạnh đa giác để xử lý.

Lần lượt duyệt tất cả cạnh của đa giác:

 Không đưa cạnh nằm ngang của đa giác vào danh sách.

 Kiểm tra 2 cạnh đa giác liên tiếp, nếu đỉnh chung không là điểm cựctrị (local extremum), làm ngắn đầu cạnh của một cạnh đi qua đỉnh chung một pixel.

Bước 3: Tiến hành tô màu.

Tiến hành các đường quét ngang tư ø Ymin + 1 đến Ymax - 1.

 Ứng với một đường quét ngang yi nào đó, ta xác định các điểm cắt(bằng giải thuật tìm giao điểm giữa hai đoạn thẳng đã có), giữa các đường quétngang với tất cả các cạnh của đa giác Vì tung độ y của điểm cắt bằng yi nên ta chỉcần đưa các hoành độ xi của điểm cắt vào một danh sách.

 Sắp xếp lại danh sách sao cho các giá trị xi tăng dần. Duyệt qua các điểm cắt và đếm số điểm cắt đã duyệt

 Nếu điểm cắt trùng với đỉnh của đa giác: Nếu có một cạnh song songvới đường quét thì đỉnh trước đếm tăng và đỉnh sau không đếm tăng.

 Tô màu giữa các cặp giao điểm

Bước 4: Lập lại bước hai cho đến khi yi = ymax.

Bước 5: Vẽ lại đa giác bằng màu đã tô.

Lưu ý: Nếu đa giác không phải là đa giác đơn thì giải thuật này không vận dụngđược.

7 Điểm bên trong / bên ngoài đa giác

Cơ sở toán học:

Giải thuật này nhằm xác định một điểm cho trước có nằm bên trongmột đa giác đơn phẳng hay không.

Giải thuật xây dựng dựa trên định lý mang tên JORDAN sau đây:

“Mỗi đường cong, kín, đơn, phẳng, một chiều, phân hoạch mặt phẳng thành haimiền, một trong hai miền đó hoàn toàn chứa những đường thẳng nào đó, miền còn lạithì không có tính chất đó”.

Trang 36

Trong định lý trên đây một trong hai miền sẽ được gọi là miền trong (gồm bản thânđường cong và phần mặt phẳng giới nội bởi đường cong) Không thuộc miền tronggọi là miền ngoài.

Định lý này vẫn đúng cho trường hợp đa giác đơn phẳng một chiều như là mộttrường hợp riêng.

Từ định lý này dẫn đến hệ quả sau:

“Từ một điểm P bất kỳ, vẽ một tia chỉ cắt đa giác ở những điểm trong của cáccạnh (nghĩa là : không đi qua đỉnh nào của đa giác); nếu số giao điểm là lẻ thì P làđiểm trong, nếu số giao điểm là chẵn thì P là điểm ngoài”.

Về mặt kỹ thuật mọi đường cong đơn, phẳng, kín, liên thông, không tự cắt đều cóthể tiếp cận tuyến tính bằng một đa giác bao gồm một số hữu hạn các cạnh liên tiếp.Vì vậy cho phép xây dựng một giải thuật test quan hệ trong/ ngoài chỉ bằng cách xétsố giao điểm của tia có gốc là điểm cần xét.

Giải thuật:

- Chọn Px là nửa đường thẳng xuất phát từ P song song với trục Ox,hướng về phía x>0 Lấy P=(x,y).

- P là điểm cần xét.

- Nếu (P là một đỉnh) hoặc (P thuộc trong một cạnh) thì Return (P điểm trong)

- Ngược lại, xác định giao điểm Px với các cạnh đa giác {

Ci là cạnh Pi Pi+1 của đa giác

Nếu y = yi thì xét hai cạnh có một đầu là Pi (1)

Nếu cả hai đầu kia ở một phía của Pi thì tính Px cắt cảhai cạnh

Ngược lại (1)

Nếu y > Max(yi,yi+1) hay y<Min(yi,yi+1) (2) Thì Px không cắt cạnh Ci

Trang 37

- Nếu số giao điểm lẻ

Return P thuộc đa giác.

8 Kiểm tra quan hệ giữa đoạn thẳng và đa giác

Các chương trình ứng dụng mô tả các hình ảnh bằng hệ tọa độ thế giớithực, có thể là bất kỳ hệ tọa độ Descartes nào mà người dùng cảm thấy thuận tiệnnhất Các hình ảnh được mô tả trong hệ tọa độ thực sau đó sẽ được các hệ độ họaánh xạ vào các hệ tọa độ thiết bị Thông thường, các hệ đồ họa cho phép người dùngxác định một vùng nào đó của hình ảnh được hiển thị và nó sẽ hiển thị ở đâu trênmàn hình (viewport) Ta có thể chọn một vùng hay nhiều vùng để hiển thị, các vùngnày có thể đặt ở các nơi khác nhau hay lồng vào nhau trên màn hình Quá trình nàyđòi hỏi nhiều thao tác như dịch chuyển, biến đổi tỷ lệ để đưa vào bên trong viewporthoặc đơn giản là loại bỏ các phần hình ảnh nằm ngoài vùng đang được xét Thao táccuối cùng và cũng được sử dụng nhiều nhất còn được gọi là clipping Trong thuậtngữ thông thường Viewport được hiểu như một window (hình chữ nhật) theo đó hìnhảnh được clipping Tuy nhiên Viewport cũng có thể là một đa giác bất kỳ Bài toánclipping sau đây được xét cho trường hợp tổng quát hơn: clipping với đa giác đơn bấtkì (cho cả hai trường hợp đa giác lồi hoặc lõm).

Cơ sở toán học và giải thuật:

Các bước tiến hành clipping đoạn thẳng AB bằng một đa giác đơn, phẳng bất kì như sau:

Bước 1: Hoán đổi A, B để xA < xB.

Trang 38

Nếu xA = xB Hoán đổi A,B để yA < yB

Bước 2: Kiểm tra tính trong ngoài của A và B đối với đa giác

(Dùng giải thuật kiểm tra điểm bên trong/ngoài đa giác )

Bước 3: Tìm giao điểm của AB với đa giác

(Dùng giải thuật xác định giao điểm của 2 đoạn đã có )Nếu có giao điểm thì

Bước 4: Thực hiện clipping.

- Nếu A và B đều nằm trong đa giác thì (1)

Nếu số điểm cắt = 0, Return (AB nằm hoàn toàn trong đa giác) - Ngược lại

Return (Đoạn thẳng thuộc đa giác)

Ngược lại, Return (Đoạn thẳng không thuộc đa giác) Inc (i,1)

Trang 39

Cho đến khi i = số điểm cắt}

- Ngược lại, có điểm A hay B nằm ngoài đa giác (1) - Nếu số điểm cắt = 0, Return (Đoạn AB nằm ngoài đa giác) - Nếu số điểm cắt <> 0 thì

{

Thêm tọa độ điểm A vào đầu danh sách Thêm tọa độ điểm B vào cuối danh sách i = 1

Return (Đoạn thẳng thuộc đa giác)

Ngược lại, Return (Đoạn thẳng không thuộc đa giác) inc (i,1)

Cho đến khi hết danh sách }

- Ngược lại, Return (Đoạn thẳng không thuộc đa giác).

Bước 5: Vẽ lại các đoạn thẳng thuộc đa giác

Mở rộng: Giải thuật có thể được mở rộng cho việc clipping một đa giác bằng cách

thực hiện clipping tất cả các cạnh của đa giác.

9 Kiểm tra quan hệ hai đa giác

Cơ sở toán học:

Giải thuật này cho phép clip bất kỳ một đa giác vào 1 đa giác Nó cũngcho phép hình thành sự giao, hội của 2 đa giác.Chúng ta bắt đầu bằng ví dụ minh

Ngày đăng: 23/11/2012, 09:35

HÌNH ẢNH LIÊN QUAN

• Hình học giải tích trong không gian. - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
Hình h ọc giải tích trong không gian (Trang 10)
Hìn ha Hình b - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
n ha Hình b (Trang 11)
Hình trên ta phân tíc ha thàn hc theo chiều vector b và e. Theo cách này vector c gọi là chiếu trực giao của a lên b - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
Hình tr ên ta phân tíc ha thàn hc theo chiều vector b và e. Theo cách này vector c gọi là chiếu trực giao của a lên b (Trang 16)
Ví du ï: trong hai chiều, chiếu của a= (6,4) lên b= (1,2) như hình dưới - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
du ï: trong hai chiều, chiếu của a= (6,4) lên b= (1,2) như hình dưới (Trang 17)
Hình chiếu củ ac 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 trong 2D và 3D
Hình chi ếu củ ac 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 ) (Trang 17)
Xét điểm Q, giả sử đườn gE đi qua điể mA và có chuẩn hướng ran như hình vẽ: - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
t điểm Q, giả sử đườn gE đi qua điể mA và có chuẩn hướng ran như hình vẽ: (Trang 19)
Thiết kế hệ thống kiểm tra các quan hệ hình học trang 20 - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
hi ết kế hệ thống kiểm tra các quan hệ hình học trang 20 (Trang 20)
Luận văn tốt nghiệp - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
u ận văn tốt nghiệp (Trang 20)
• Ý nghĩa hình học của tích vector: - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
ngh ĩa hình học của tích vector: (Trang 22)
II. CÁC ĐỐI TƯỢNG HÌNH HỌC VÀ SỰ TƯƠNG QUAN - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
II. CÁC ĐỐI TƯỢNG HÌNH HỌC VÀ SỰ TƯƠNG QUAN (Trang 24)
2.Tìm hình chiếu của đoạn thẳng AB lên đườngthẳng b - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
2. Tìm hình chiếu của đoạn thẳng AB lên đườngthẳng b (Trang 28)
- Khi đó A’B’ chính là hình chiếu của AB. - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
hi đó A’B’ chính là hình chiếu của AB (Trang 29)
họa trong hình sau. Ta liệt kê những đỉnh theo thứ tự từ trái sang phải, theo chiều kim  đồng hồ. - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
h ọa trong hình sau. Ta liệt kê những đỉnh theo thứ tự từ trái sang phải, theo chiều kim đồng hồ (Trang 40)
Dựa vào hình vẽ trên, ta có: - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
a vào hình vẽ trên, ta có: (Trang 40)
* Tổng hợp các phép biến hình - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
ng hợp các phép biến hình (Trang 47)
tượng 3-D lên màn hình, có hai phương pháp để thực hiện vấn đề trên là phép chiếu song song và phép chiếu phối cảnh - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
t ượng 3-D lên màn hình, có hai phương pháp để thực hiện vấn đề trên là phép chiếu song song và phép chiếu phối cảnh (Trang 50)
Thiết kế hệ thống kiểm tra các quan hệ hình học trang 51 - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
hi ết kế hệ thống kiểm tra các quan hệ hình học trang 51 (Trang 51)
Hình chiếu P’(xc,yc) của điểm P(xo, yo, zo): Do mặt phẳng màn hình vuông góc với trục Oz’ và tâm chiếu là O’. - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
Hình chi ếu P’(xc,yc) của điểm P(xo, yo, zo): Do mặt phẳng màn hình vuông góc với trục Oz’ và tâm chiếu là O’ (Trang 51)
Thiết kế hệ thống kiểm tra các quan hệ hình học trang 54 - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
hi ết kế hệ thống kiểm tra các quan hệ hình học trang 54 (Trang 54)
Thiết kế hệ thống kiểm tra các quan hệ hình học trang 57 - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
hi ết kế hệ thống kiểm tra các quan hệ hình học trang 57 (Trang 57)
Thiết kế hệ thống kiểm tra các quan hệ hình học trang 58 - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
hi ết kế hệ thống kiểm tra các quan hệ hình học trang 58 (Trang 58)
Thiết kế hệ thống kiểm tra các quan hệ hình học trang 59 - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
hi ết kế hệ thống kiểm tra các quan hệ hình học trang 59 (Trang 59)
Thiết kế hệ thống kiểm tra các quan hệ hình học trang 60 - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
hi ết kế hệ thống kiểm tra các quan hệ hình học trang 60 (Trang 60)
 Màn hình làm việc trong phần 2D, bao gồm các đề mục như thao tác trong 2D, thao tác trong 3D và các thao tác xử lý tương ứng - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
n hình làm việc trong phần 2D, bao gồm các đề mục như thao tác trong 2D, thao tác trong 3D và các thao tác xử lý tương ứng (Trang 73)
Thiết kế hệ thống kiểm tra các quan hệ hình học trang 74 - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
hi ết kế hệ thống kiểm tra các quan hệ hình học trang 74 (Trang 74)
Luận văn tốt nghiệp - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
u ận văn tốt nghiệp (Trang 74)
Trong phần 3D, tôi xin giới thiệu một số hình ảnh demo chương trình - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
rong phần 3D, tôi xin giới thiệu một số hình ảnh demo chương trình (Trang 75)
 Màn hình làm việc khi người dùng chọn một trong các thao tác kiểm tra giữa các đối tượng hình học - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
n hình làm việc khi người dùng chọn một trong các thao tác kiểm tra giữa các đối tượng hình học (Trang 75)
Thiết kế hệ thống kiểm tra các quan hệ hình học trang 76 - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
hi ết kế hệ thống kiểm tra các quan hệ hình học trang 76 (Trang 76)
Tạo thêm những chức năng kích hoạt lại những đối tượng hình học khi đã được  thể hiện trên vùng  Client như: - Thiết kế hệ thống kiểm tra các quan hệ hình học trong 2D và 3D
o thêm những chức năng kích hoạt lại những đối tượng hình học khi đã được thể hiện trên vùng Client như: (Trang 77)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

w