Thiết kế hệ thống kiểm tra các quan hệ hình học trong không gian 2D 3D.doc

78 1.3K 2
Thiết kế hệ thống kiểm tra các quan hệ hình học trong không gian 2D 3D.doc

Đ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

Thiết kế hệ thống kiểm tra các quan hệ hình học trong không gian 2D 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ững bướ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ản phẩ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án họ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ình Visual C++ để thể hiện Về góc độ học tập, nghiên cứu tôi thấy đề tài có thể giúp hiể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 tra thự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ẫn trong 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êu cầ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ên cứ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ễn dị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 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 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ương quan với nhau, như trùng nhau, cắt nhau với một góc nào đó, chéo nhau (trong khô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ết trên là hai đường thẳng a và b đã tương quan như thế nào với nhau? Cắt nhau một gó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ực hiệ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ới nhữ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ông phong 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 đưa và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ính vớ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ày khô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ÁC QUAN HỆ HÌNH HỌC“, tôi đã trình bày một ví dụ về yêu cầu nhiệm vụ để thực hiệ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ữ Visual C++ 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à để cho nhữ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ên nghiên cứu tìm hiểu tổng quát về ngôn ngữ như Visual C++, thực hiện những chươ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ểu chí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 trong những thuật toán và thể hiện trực quan bằng đồ hoạ máy tính trên ngôn ngữ Visual C++.

Trong Visual C++ phần đồ họa được thể hiện trong 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 hơn trong ngôn ngữ Visual C++ có sự hỗ trợ cho việc vẽ các đối tượ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ượng hì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ọc phần 3D tôi thực hiện trên OPENGL Từ đây tôi chuyển hướng sang nghiên cứu OPENGL để 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ôi có nhận xét rằng OPENGL là một ứng dụng để thực hiện các chương trình đồ họa má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àng hơ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ủa OPENGL 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ế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 các ứng dụng 3-D phức tạ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úi cô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ông nghiệ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ác nhau.

Nhận xét về OPENGL tôi thấy rằng OPENGL là thư viện đồ họa trên WINDOWS bởi vì ta có thể thấy rằng OPENGL không những thực hiện trên ngôn ngữ 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ụng trong đề 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 macro RGB(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ớp CPoint, đố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ụ ta khai báo điểm point như sau:

CPoint point point.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ái là (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ớp CClientDC 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àm nà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ày bắt đầu bằng GL Windows NT hỗ trợ 4 chủng loại hàm khác, bao gồm thư viện OpenGL utility(tên hàm bắt đầu bằng GLU), thư viện OpenGL auxiliary(tên hàm bắt đầu bằng AUX), bộ hàm”WGL” (tên hàm bắt đầu bằng WGL), và các 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ế 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án cấ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ác hà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ản hoá 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ình trụ 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ác ví dụ lập trình trong sách chỉ dẫn lập trình OpenGL Các hàm phụ thuộc platform nà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 đối tượ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ùng trong 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ập trì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àm nà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ác primitive.

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ởi tạ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 ma trận tịnh tiến.

 gl Rotatef(Glfloat Angle, Glfloat x, Glfloat y, Glfloat z); nhân ma trận hiện hà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ởi cá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àu xó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 đến GL_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 hay sau.

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ổng quá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ực hiệ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án họ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 Hai dạ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 được vẽ 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 hai hằ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ểu

Trang 11

Với hai điểm P1(x1,y1) và P2(x2,y2) ta định nghĩa vector v với các thành phần là vector v =(x2-x1, y2-y1) Đôi khi vector này được ghi là P1P2 và gọi là vector từ P1 đến P2 Bản thân vector không bị buộc vào một vị trí, mặc dù để dễ hình dung thường vẽ chúng xuất phát từ một điểm Với điểm bất kỳ P = (Px, Py) trong một hệ tọa độ, vector đi từ gốc tọa độ với các tọa độ v=(Px, Py) được gọi là vector vị trí cho P Vector 3D cũng rất quan trọng trong đồ họa.

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úng ta 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-c c

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:

Vector có độ dài bằng zero thường được gọi là vector 0 Chương trình con minh họa như sau: Function Length(vector v): Real;

 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ộ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.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 vector theo 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:

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ợp tuyế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ủa mộ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óc giữ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à:

V W = ViWi với i = 1,… ,n

Tích vô hướng của hai vector được thể hiện trong thủ tục sau: Procedure Float Dot (vector a,b)

{

return Dot = a.dx* b.dx+ a.dy* b.dy; }

 Các tính chất của tích vô hướng 1 Đối xứng : a.b = b.a

2 Tuyến tính: (a+c).b = a.b + c.b 3 Đồng nhất : (sa).b = s(a.b) 4 | b2 | = b.b

Độ 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úng tạ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 trong tam 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|2 ta 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óa

Trang 16

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

ta có góc giữa hai vector như sau:  Nhỏ hơn 90o nếu a.b >0  Bằng 900 nếu a.b = 0  Lớn hơn 90o nếu 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ày vector 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òn phả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ương trình:

|c| = |a|aa.bb = a.ub (*)

Như thế độ dài của c chỉ phụ thuộc vào độ dài của a Bây giờ 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

Trang 17

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ài củ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ư

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 đi từ 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ốc tọ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  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ẳng hoàn toàn được xác định với một điểm S = (sx, sy, sz) nằm trong đó và hướng chuẩn củ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 trong mặ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ỳ trong mặt phẳng, xây dựng vector từ R đến S, vuông góc với n.

n.(R-S) = 0 Thay 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ùng tí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ặt phẳ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ớn hơ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ằm trê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 Q vớ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 > 0 2 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à đa giá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 20

ngoài được loại ra Sau khi mọi cạnh đã được kiểm tra, phần còn lại của L sẽ nằm trong W.Ta biểu diễn L ở dạng tham số:

P(t) = P1 + ct với c = P2 - P1.

Với mỗi cạnh cửa sổ, dùng hai giá trị tin và tout để giữ lại vùng của t mà đoạn có thể nằm trong cửa sổ Nghĩa là không thể thấy đoạn ở ngoài khoảng (tin, tout) Giá trị bắt đầu cho tin và tout là 0 và 1 Khoảng này liên tục được cắt xén khi xử lý xong mỗi cạnh Nếu lúc nào khoảng này thành rỗng, thoát ra khỏi thuật giải cắt, và đoạn L hoàn toàn bị cắt Còn không thì khoảng (tin, tout ) xác định phần của L nằm trong cửa sổ Vì W lồi, mỗi cạnh E của nó có thể cho là đường cho ở dạng điểm

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à P1 và kiểm tra trong-ngoài Đặt p1= P1 - 0 là vector từ gốc tọa độ đến P1 L sẽ hoàn toàn nằm trong nếu:

p1.n < D Ngượ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ảm về 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ủa nó là nó trực giao với hai vector ban đầu Tích vector chỉ được định nghĩa cho vector ba chiều, nhưng nó cũng áp dụng trong một số vấn đề trong đồ họa liên quan đến đa giá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 = k j x k = i i x k = j

2 a x b = -b x b

Trang 22

3 a x (b + c) = a x b +a x c 4 (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à:

|a x b| = |a||b|sin()

với  là góc giữa a và b, đo từ a đến b hay ngược lại miễn sao góc nhỏ hơn 1800.

3 Chiều của a x b xác định từ quy tắc bàn tay phải khi làm việc trong hệ tay phải.

 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ối lă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

Trang 23

Trong không gian, qua 3 điểm A (xa, ya, za), B(xb, yb, zb), và C(xc, Yc, zc) không thẳ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:

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:

Trang 24

Trong không gian cho hai điểm A (xa , ya , za), B(xb , yb , zb) sẽ xác định được phươ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ố:

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

Phương trình tổng quát của đường thẳng qua 2 điểm trong 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:

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ông thuộ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 song song.

 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ông thuộ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ông thuộ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éo nhau, 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 đường thẳ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 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 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à

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:

- Tính vector chỉ phương a và b của 2 đoạn thẳng - Tính vector vô hướng a.b

- 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ìm hì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ình chiế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:

Trang 29

 Tương tự tính B’ là giao điểm của:

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ạn thẳng có thể bố trí theo nhiều cách khác nhau.

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 đó xem giao đ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 ) * uo ay + (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ương

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, ta xem 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 đường cha 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ượng nà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ạn có 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 đầu trù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

+ Return 1; ( 2 đoạn thẳng cắt nhau tại M) Ngược lại Return 2; (2 doạn thẳng không cắt nhau) - Ngược lại,

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 đường thẳ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ẳng khé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ọi cạ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à đỉnh thứ 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ật toá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ên mà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ật toá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òng quét (scan-line algorithm) hay còn gọi là giải thuật tô màu chẵn 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.

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ững pixels tiếp theo sẽ được tô, nếu đi ra ngoài những pixels tiếp theo sẽ không được tô.

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ạnh củ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ải củ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ắn mộ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ác hoàn toàn nằm trong nó.

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ực trị (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ét ngang 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 song vớ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 trong mộ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 trong gọ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ột trườ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ét số 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

Ngược lại (2)

Nếu x <= Min (xi,xi+1) (3) Thì Py cắt cạnh Ci

Ngược lại (3)

Xét tọa độ giao điểm (yo,xo) của Px với cạnh Ci Nếu x >= xo thì Px không cắt Ci

}

- 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ới thự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ện nhấ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ùng xá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ên màn hình (viewport) Ta có thể chọn một vùng hay nhiều vùng để hiển thị, các vùng nà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 viewport hoặ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ác cuối cùng và cũng được sử dụng nhiều nhất còn được gọi là clipping Trong thuật ngữ 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án clipping sau đây được xét cho trường hợp tổng quát hơn: clipping với đa giác đơn bất kì (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ì

- Đưa các tọa độ của các điểm cắt vào một danh sách - Sắp xếp cho hoành độ các giao điểm tăng dần

(Nếu xA = xB sắp xếp theo tung độ) }

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)

Kiểm tra trong /ngoài đối với trung điểm Nếu trung điểm nằm trong đa giác thì

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

Lặp lại

Tìm trung điểm của đoạn thẳng nối hai điểm cắt kế tiếp nhau

Kiểm tra trong/ ngoài đối với trung điểm Nếu trung điểm nằm trong đa giác thì

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ũng cho 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: 21/08/2012, 16:18

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 không gian 2D 3D.doc

Hình h.

ọc giải tích trong không gian Xem tại trang 10 của tài liệu.
Hìn ha Hình b - Thiết kế hệ thống kiểm tra các quan hệ hình học trong không gian 2D 3D.doc

n.

ha Hình b Xem tại trang 11 của tài liệu.
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 không gian 2D 3D.doc

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 Xem tại trang 16 của tài liệu.
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 không gian 2D 3D.doc

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 ) Xem tại trang 17 của tài liệu.
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 không gian 2D 3D.doc

du.

ï: trong hai chiều, chiếu của a= (6,4) lên b= (1,2) như hình dưới Xem tại trang 17 của tài liệu.
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 không gian 2D 3D.doc

hi.

ết kế hệ thống kiểm tra các quan hệ hình học trang 20 Xem tại trang 20 của tài liệu.
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 không gian 2D 3D.doc

u.

ận văn tốt nghiệp Xem tại trang 20 của tài liệu.
• Ý 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 không gian 2D 3D.doc

ngh.

ĩa hình học của tích vector: Xem tại trang 22 của tài liệu.
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 không gian 2D 3D.doc
II. CÁC ĐỐI TƯỢNG HÌNH HỌC VÀ SỰ TƯƠNG QUAN Xem tại trang 24 của tài liệu.
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 không gian 2D 3D.doc

2..

Tìm hình chiếu của đoạn thẳng AB lên đườngthẳng b Xem tại trang 28 của tài liệu.
- 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 không gian 2D 3D.doc

hi.

đó A’B’ chính là hình chiếu của AB Xem tại trang 29 của tài liệu.
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 không gian 2D 3D.doc

a.

vào hình vẽ trên, ta có: Xem tại trang 40 của tài liệu.
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 không gian 2D 3D.doc

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ồ Xem tại trang 40 của tài liệu.
Thiết kế hệ thống kiểm tra các quan hệ hình học trang 46 - Thiết kế hệ thống kiểm tra các quan hệ hình học trong không gian 2D 3D.doc

hi.

ết kế hệ thống kiểm tra các quan hệ hình học trang 46 Xem tại trang 46 của tài liệu.
* 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 không gian 2D 3D.doc

ng.

hợp các phép biến hình Xem tại trang 47 của tài liệu.
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 không gian 2D 3D.doc

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 Xem tại trang 50 của tài liệu.
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 không gian 2D 3D.doc

hi.

ết kế hệ thống kiểm tra các quan hệ hình học trang 51 Xem tại trang 51 của tài liệu.
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 không gian 2D 3D.doc

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’ Xem tại trang 51 của tài liệu.
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 không gian 2D 3D.doc

hi.

ết kế hệ thống kiểm tra các quan hệ hình học trang 54 Xem tại trang 54 của tài liệu.
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 không gian 2D 3D.doc

hi.

ết kế hệ thống kiểm tra các quan hệ hình học trang 57 Xem tại trang 57 của tài liệu.
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 không gian 2D 3D.doc

hi.

ết kế hệ thống kiểm tra các quan hệ hình học trang 58 Xem tại trang 58 của tài liệu.
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 không gian 2D 3D.doc

hi.

ết kế hệ thống kiểm tra các quan hệ hình học trang 59 Xem tại trang 59 của tài liệu.
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 không gian 2D 3D.doc

hi.

ết kế hệ thống kiểm tra các quan hệ hình học trang 60 Xem tại trang 60 của tài liệu.
 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 không gian 2D 3D.doc

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 Xem tại trang 73 của tài liệu.
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 không gian 2D 3D.doc

hi.

ết kế hệ thống kiểm tra các quan hệ hình học trang 74 Xem tại trang 74 của tài liệu.
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 không gian 2D 3D.doc

u.

ận văn tốt nghiệp Xem tại trang 74 của tài liệu.
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 không gian 2D 3D.doc

rong.

phần 3D, tôi xin giới thiệu một số hình ảnh demo chương trình Xem tại trang 75 của tài liệu.
 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 không gian 2D 3D.doc

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 Xem tại trang 75 của tài liệu.
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 không gian 2D 3D.doc

hi.

ết kế hệ thống kiểm tra các quan hệ hình học trang 76 Xem tại trang 76 của tài liệu.
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 không gian 2D 3D.doc

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ư: Xem tại trang 77 của tài liệu.

Từ khóa liên quan

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

Tài liệu liên quan