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 3D

49 577 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

Tiêu đề Thiết kế hệ thống kiểm tra các quan hệ hình học trong 3D
Người hướng dẫn Trịnh Vân Anh
Trường học Học Viện Công Nghệ Bưu Chính Viễn Thông
Chuyên ngành Công Nghệ Thông Tin
Thể loại Đề tài
Năm xuất bản 2010
Thành phố Hà Nội
Định dạng
Số trang 49
Dung lượng 565 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Thiết kế hệ thống kiểm tra các quan hệ hình học trong không gian ba chiều (3D) Với ngôn ngữ thể hiện trên môi trường Visual C++.

Trang 1

KĨ THUẬT ĐỒ HỌA

Đề Tài: THIẾT KẾ HỆ THỐNG KIỂM TRA CÁC QUAN HỆ

HÌNH HỌC TRONG 3D

Giảng viên hướng dẫn : Trịnh Vân Anh

Nhóm sinh viên thực hiện :

Lớp:

Hà nội ngày 02-12-2010

Trang 2

MỤC LỤC

PHẦN I: GIỚI THIỆU 2

I SƠ LƯỢC VỀ HỆ THỐNG KIỂM TRA CÁC QUAN HỆ HÌNH HỌC 2

II GIỚI THIỆU SƠ LƯỢC NGÔN NGỮ THỂ HIỆN ĐỀ TÀI 2

1 Sơ lược ngôn ngữ 2

2 Giới thiệu các hàm của ngôn ngữ được sử dụng 3

PHẦN II: NỘI DUNG 9

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

1 Giới thiệu về vector: 9

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

II CÁC ĐỐI TƯỢNG HÌNH HỌC VÀ SỰ TƯƠNG QUAN TRONG 3D 23

1 Các đối tượng hình học cơ bản: 23

2 Sự tương quan giữa các đối tượng hình học: 23

3 Kiểm tra sự tương quan giữa các đối tượng hình học: 23

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 KHÔNG GIAN 3D 24

1 Các phép biến hình 3 chiều 24

2 Biểu diễn đối tượng 3D 27

3 Quan sát vật thể 3D qua hệ tọa độ quan sát 29

4 Kiểm tra quan hệ Điểm - Đường thẳng 32

5 Kiểm tra quan hệ Điểm - Mặt phẳng 33

6 Kiểm tra quan hệ Đường thẳng - Mặt phẳng 35

7 Kiểm tra quan hệ Đường thẳng - Đường thẳng 37

8 Kiểm tra quan hệ Mặt phẳng - Mặt phẳng 40

9 Kiểm tra tính đồng phẳng của đa giác 43

10 Tính thể tích hình lăng trụ 44

11 Tính thể tích hình chóp 44

12 Tính thể tích hình nón 44

PHẦN III: THIẾT KẾ CHƯƠNG TRÌNH 45

I THIẾT KẾ GIAO DIỆN THỰC HIỆN KIỂM TRA CÁC QUAN HỆ HÌNH HỌC 45 II II MỘT SỐ KIỂU DỮ LIỆU ĐƯỢC SỬ DỤNG TRONG CHƯƠNG TRÌNH 45

III CÁCH TỔ CHỨC CÁC HÀM TRONG OPENGL 3D 46

1 Những hàm được sử dụng trong lớp CkiemTra3Dview 46

2 Những hàm được sử dụng trong lớp CkiemTra3Ddoc 48

Trang 3

PHẦN I: GIỚI THIỆU

HỌC

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 ba chiều (3D)Với ngôn ngữ thể hiện trên môi trường Visual C++

Để dễ dàng hơn chúng em 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 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 hay song song…Sau khi đưavà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ếtquả 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ệncủ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ữngdò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àitoá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ánchẳ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ựchiệ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 quanhơ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ênhấ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ựchiện đề tài

1 Sơ lược ngôn ngữ

Ở 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 TRONG 3D“, chúng em đã 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 đề

đó chúng em 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 chúng em thể hiện đề tài trên ngôn ngữ VisualC++ 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ươngdiệ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ênngôn ngữ Visual C++

Trang 4

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 đối tượng hìnhhọ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, đốitượ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, chúng em 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ần3D này chúng em thực hiện trên OPENGL Sau khi nghiên cứu và hiểu được những yếu

tố cơ bản của OPENGL chúng em có nhận xét rằng OPENGL là một ứng dụng để thựchiệ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àmthà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

OpenGL được định nghĩa là “giao diện phần mềm cho phần cứng đồ họa ” Thựcchấ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ôngnghiệ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ạpvớ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ôngthứ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 chúng em 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ôn ngữVisual C++ mà còn có thể cho phép thực hiện trên cả Visual Basis , Borland C++

2 Giới thiệu các hàm của ngôn ngữ được sử dụng

a) 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í dụ: Để vẽ một điểm, ta thực hiện như sau:

CClientDC dc( this );

Trang 5

dc.SetPixel (100,100,GRB(0,0,0);

Để 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ụ ta khaibáo điểm point như sau:

CPoint point

point.x=100;

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ớpCClientDC Cú pháp vẽ hình Ellipse như sau:

Trang 6

CClientDC dc(this);

dc.ellipse(int x1, int y1, intx2, int y2);

Hàm loan vùng kín:

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

Hàm 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);

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 OpenGLutility(tên hàm bắt đầu bằng GLU), thư viện OpenGL auxiliary(tên hàm bắt đầu bằngAUX), bộ hàm”WGL” (tên hàm bắt đầu bằng WGL), và các hàm WIN32 API (tên hàmkhô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 matrận…

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

Trang 7

 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ựchiệ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ảnxuấ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à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

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)

Trang 8

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ện hànhbở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ácthà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); đặtmàu cho việc xóa buffer 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

 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ácgiá 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 đượclập

Trang 9

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

Trang 10

PHẦN II: NỘI DUNG

Trong phần giới thiệu chúng em trình bày những nội dung sơ lược mang tínhtổ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

Các lý thuyết cơ sở toán học được sử dụng cho thuật toán trong đề tài “THIẾT

KẾ HỆ THỐNG KIỂM TRA CÁC QUAN HỆ HÌNH HỌC TRONG 3D“ 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

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ệnviệ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

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ạngthườ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ớimộ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 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ộtcặp có thứ tự a=(ax, ay) Trong chương trình, vector được biểu diễn bằng kiểu dữ liệu:

Trang 11

a+bb

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 takhô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á trị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

Trang 12

Hình a Hình b

c-c

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.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 );

Procedure Scalar(real s; vector a; vector &b)

{

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

Trang 13

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

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 vector theocá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

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

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à ứngdụ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 a i =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+ a2b2Mộ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ủa hai 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

Trang 15

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

|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ữahai vector a và b Các vector này có thể có hai, ba, hay nhiều chiều Chúng tạo thànhhai 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()

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 haivector

 Dấu cuả vector a.b và sự trực giao

Ta biết rằng

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

Do vậy từ phương trình:

cos() = ua.ub

a

bHình a

Trang 16

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

xy

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 cgọ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ươngtrình:

|c| = |a|a a. b b = 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

Ví dụ: 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ủ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ệccắ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ư 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ươngtrình đường thẳng vẫn phụ thuộc vào gốc không có gì thay đổi Như vậy ta có:

Ac

n

L

cn

xy

Trang 18

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âydự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:

Đâ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 = DVớ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

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ẽ:

Sn

nE

AinsideE

Trang 19

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 đặta.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áclồ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 Tamuố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 đượckiểm tra đối với mỗi cạnh của W, và phần nằm ở nửa không gian phía 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

w

LP

P2

Trang 20

W lồi, mỗi cạnh E của nó có thể cho là đường cho ở dạng điểm chuẩn:

n.p = D

Với n là chuẩn hướng ra của cạnh Bây giờ E có thể có một số tình huống so vớiđường L

 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ằmtrong 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 trình:

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

Trang 21

< 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 bachiều, nhưng nó cũng áp dụng trong một số vấn đề trong đồ họa liên quan đến đa giáchai 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:

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ố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

Trang 22

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:

a x b

Thể tích a x b x c

abc

Trang 23

Phương trình mặt phẳng mp(ABC) ở dạng tổng quát:

Trang 24

II CÁC ĐỐI TƯỢNG HÌNH HỌC VÀ SỰ TƯƠNG QUAN TRONG

3D

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ậychúng em 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ánnày chúng ta có thể mở rộng ra cho một diễn dịch rộng lớn hơn

 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?

thuộc mặt phẳng

c Đườ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?

 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

Ngày đăng: 13/04/2013, 11:12

HÌNH ẢNH LIÊN QUAN

HÌNH HỌC TRONG 3D - THIẾT KẾ HỆ THỐNG KIỂM TRA CÁC QUAN HỆ HÌNH HỌC TRONG 3D
3 D (Trang 1)
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 - THIẾT KẾ HỆ THỐNG KIỂM TRA CÁC QUAN HỆ HÌNH HỌC TRONG 3D
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 (Trang 16)
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 - THIẾT KẾ HỆ THỐNG KIỂM TRA CÁC QUAN HỆ HÌNH HỌC TRONG 3D
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 (Trang 17)
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 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 31)

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

🧩 Sản phẩm bạn có thể quan tâm

w