Hình chóp cụt

Một phần của tài liệu Chương trình hỗ trợ dạy và học môn hình học lớp 11 (Trang 35)

5 Hiện thực chương trình

3.18 Hình chóp cụt

Góc giữa hai đường thẳng trong khơng gian

Góc giữa hai đường thẳng a và b trong khơng gian là góc giữa hai đường thẳng a’ và b’ cùng đi qua một điểm và lần lượt song song với a và b.

3.1 Lý thuyết cơ bản về hình học 11

Nếu −→u1,u2 lần lượt là vec tơ chỉ phương của a và b và (→ −u1,→ −u2) =α thì góc (a, b) = α nếu 0 ¡ α ≤ 90 và bằng 180 - α nếu α > 90.

Hai đường thẳng được gọi là vng góc với nhau nếu góc giữa chúng bằng 90o

Hình 3.19: Góc giữa hai đường thẳng trong khơng gian

Đường thẳng vng góc với mặt phẳng

Một đường thẳng gọi là vng góc với mặt phẳng nếu nó vng góc với mọi đường thẳng nằm trong mặt phẳng ấy.

3.1 Lý thuyết cơ bản về hình học 11 Góc giữa hai mặt phẳng

Góc giữa hai mặt phẳng là góc giữa hai đường thẳng lần lượt vng góc với hai mặt phẳng đó.

Hai mặt phẳng gọi là vng góc với nhau nếu góc giữa chúng bằng 90o.

Hình 3.21: Hai mặt phẳng vng góc

Hình lăng trụ đứng, hình hộp chữ nhật, hình lập phương

Hình lăng trụ đứng là hình lăng trụ đứng có đáy là đa giác đều. Hình hộp đứng là hình lăng trụ đứng có đáy là hình bình hành. Hình hộp chữ nhật là hình hộp đứng có đấy là hình chữ nhật. Hình lập phương là hình hộp có tất cả các mặt là hình vng.

3.1 Lý thuyết cơ bản về hình học 11

Hình 3.22: Hình lăng trụ đứng

Hình 3.23: Hình hộp chữ nhật

Hình 3.24: Hình lập phương

Hình chóp đều và hình chóp cụt đều

3.2 OpenGL

tạo với mặt đáy các góc bằng nhau.

Hình chóp cụt đều: Phần của hình chóp đều nằm giữa đáy và một thiết diện song song với đáy gọi là hình chóp cụt đều.

Hình 3.25: Hình chóp đều

Hình 3.26: Hình chóp cụt đều

3.2 OpenGL

3.2.1 OpenGL

OpenGL (Open Graphics Library) là một API đa nền tảng, đa ngôn ngữ cho render đồ họa vector 2D và 3D. OpenGL thường được sử dụng để tương tác với bộ

3.2 OpenGL

xử lý đồ họa (GPU), nhằm đạt được tốc độ render phần cứng.

Silicon Graphics, Inc. (SGI) Bắt đầu phát triển OpenGL năm 1991 và phát hành nó vào 30 tháng 6 năm 1992; Nó dùng trong các ứng dụng CAD, thực tế ảo, mô phỏng khoa học, mô phỏng thông tin, video game. Từ năm 2006, OpenGL được quản lý bởi consortium cơng nghệ phi lợi nhuận Khronos Group. Đối thủ chính của OpenGL là DirectX của Microsoft.

Với OpenGL, một ứng dụng có thể tạo ra các hiệu ứng tương tự trong bất kỳ hệ điều hành nào sử dụng các bộ điều hợp đồ họa của OpenGL. Có thể nói, OpenGL giống như một ngơn ngữ đồ họa độc lập và có khả năng tương thích với mọi nền tảng, mọi kiểu máy tính, thậm chí cả trên những máy tính khơng hỗ trợ đồ họa cao cấp.

3.2.2 Cơ chế hoạt động của OpenGL

OpenGL chỉ định một tập hợp các “lệnh” hoặc các hàm phải được thực thi ngay lập tức. Trong đó mỗi lệnh phụ trách một hành động vẽ hoặc tạo ra các hiệu ứng đặc biệt nào đó. Một danh sách các lệnh như vậy có thể được tạo ra để tạo các hiệu ứng lặp đi lặp lại OpenGL độc lập với các đặc tính của mỗi hệ điều hành, nhưng cung cấp các quy trình “glue” đặc biệt cho mỗi hệ điều hành, điều này cho phép OpenGL hoạt động được trong môi trường của hệ thống đó.

OpenGL chứa đựng một số lượng lớn các tính năng tích hợp được chỉ định và u cầu thơng qua API, bao gồm loại bỏ bề mặt ẩn, trộn alpha, chống hiệu ứng răng cưa, làm mịn, tính tốn pixel, theo dõi và biến đổi các mơ hình, và các hiệu ứng về khơng khí (sương mù, khói và khói mù).

3.2.3 Tác dụng của OpenGL

• Đơn giản hóa việc tương tác giữa các mơ hình khơng gian 3 chiều bằng một giao diện lập trình thống nhất.

• Hỗ trợ tối đa các chức năng của giao diện OpenGL bằng cách ép buộc các phần cứng 3 chiều khác nhau phải tương thích. Ngay cả khi khơng thể ép phần cứng hỗ trợ hoàn toàn, OpenGL có thể yêu cầu hệ thống sử dụng thêm

3.2 OpenGL

sức mạnh phần mềm để xử lý.

• Tiêu chuẩn OpenGL nhận các nguyên hàm hình học như điểm, đường thẳng và đa giác rồi chuyển thành các điểm đồ họa (pixel) trên màn hình. Q trình này được thực hiện thơng qua luồng ống dẫn đồ họa (thuật ngữ graphics pipeline). Một tên gọi khác của OpenGL cũng được giới kỹ thuật chia sẻ đó là bộ máy trạng thái OpenGL.

Ưu điểm

• Miễn phí

• Cho phép can thiệp sâu vào GPU để tối ưu hóa hiệu suất.

• Tương thích đa nền tảng: Windows, iOS, MacOS, Linux hay thậm chí là cả nền tảng di động.

Nhược điểm

• Khó khăn khi xây dựng các ứng dụng đồ họa lớn và phức tạp.

• OpenGL phụ thuộc vào phần cứng. Nếu phần cứng không hỗ trợ OpenGL, chúng ta khơng thể sử dụng nó.

3.2.4 Các hàm của OpenGL được sử dụng trong chươngtrình trình 1 v o i d WINAPI g lC l e a r ( 2 G L b i t f i e l d mask 3 ) ; 1 v o i d WINAPI g l C l e a r C o l o r ( 2 G L c l a m p f red , 3 G L c l a m p f green , 4 G L c l a m p f blue , 5 G L c l a m p f alpha 6 ) ; 1 v o i d WINAPI g l M a t r i x M o d e ( 2 GLenum mode 3 ) ;

3.2 OpenGL 1 v o i d WINAPI g l L o a d I d e n t i t y (v o i d) ; 1 v o i d g l C o l o r 3 f v (c o n s t G L f l o a t * v ) ; 1 v o i d WINAPI g l C o l o r 4 f v ( 2 c o n s t G L f l o a t * v 3 ) ; 1 v o i d WINAPI g l C o l o r 4 f ( 2 G L f l o a t red , 3 G L f l o a t green , 4 G L f l o a t blue , 5 G L f l o a t alpha 6 ) ; 1 v o i d WINAPI g l T r a n s l a t e f ( 2 G L f l o a t x , 3 G L f l o a t y , 4 G L f l o a t z 5 ) ; 1 v o i d WINAPI g lF l u s h (v o i d) ; 2 v o i d WINAPI g lB e g i n ( 3 GLenum mode 4 ) ; 1 v o i d WINAPI glEnd (v o i d) ; 2 v o i d WINAPI g l E n a b l e ( 3 GLenum cap 4 ) ; 1 v o i d WINAPI glHint ( 2 GLenum target , 3 GLenum mode 4 ) ; 1 v o i d WINAPI g l V e r t e x 2 f ( 2 G L f l o a t x , 3 G L f l o a t y 4 ) ; 1 v o i d WINAPI g l V e r t e x 3 f ( 2 G L f l o a t x , 3 G L f l o a t y , 4 G L f l o a t z 5 ) ; 1 v o i d WINAPI g l P o i n t S i z e ( 2 G L f l o a t size 3 ) ; 1 v o i d WINAPI g l L i n e W i d t h ( 2 G L f l o a t width

3.2 OpenGL 1 v o i d WINAPI g l L i n e S t i p p l e ( 2 GLint factor , 3 G L u s h o r t p at t e r n 4 ) ; 1 v o i d WINAPI g l D i s a b l e ( 2 GLenum cap 3 ) ; 1 v o i d WINAPI g l P o l y g o n M o d e ( 2 GLenum face , 3 GLenum mode 4 ) ; 1 v o i d WINAPI g l P o l y g o n O f f s e t ( 2 G L f l o a t factor , 3 G L f l o a t units 4 ) ; 1 v o i d WINAPI g l B l e n d F u n c ( 2 GLenum sfactor , 3 GLenum d fa c t o r 4 ) ; 1 v o i d WINAPI g l D e p t h F u n c ( 2 GLenum func 3 ) ; 1 v o i d WINAPI g l D e p t h M a s k ( 2 G L b o o l e a n flag 3 ) ; 1 v o i d WINAPI g l u L o o k A t ( 2 G L d o u b l e eyex , 3 G L d o u b l e eyey , 4 G L d o u b l e eyez , 5 G L d o u b l e centerx , 6 G L d o u b l e centery , 7 G L d o u b l e centerz , 8 G L d o u b l e upx , 9 G L d o u b l e upy , 10 G L d o u b l e upz 11 ) ; 1 v o i d WINAPI g l V i e w p o r t ( 2 GLint x , 3 GLint y , 4 G L s i z e i width , 5 G L s i z e i height 6 ) ; 1 v o i d WINAPI g lO r t h o ( 2 G L d o u b l e left ,

3.3 MFC (Microsoft Foundation Classes)3 G L d o u b l e right , 3 G L d o u b l e right , 4 G L d o u b l e bottom , 5 G L d o u b l e top , 6 G L d o u b l e zNear , 7 G L d o u b l e zFar 8 ) ;

3.3 MFC (Microsoft Foundation Classes)

• MFC là thư viện cung cấp các lớp (class, OOP), dùng trong lập trình trên Windows.

• Được xây dựng trên cơ sở các hàm thư viện API của Windows, đã được đóng gói.

• MFC tạo ra một Application Framework giúp phát triển ứng dụng: Tạo ra kiến trúc của ứng dụng một cách khoa học, giảm bớt nhiều phần của Windows API.

• Trọng tâm của MFC là các khái niệm về Document và View Document và View hoạt động song song với nhau:

• Chứa, quản lý và hiển thị dữ liệu đặc trưng riêng của ứng dụng. • Cung cấp một giao diện để người dùng có thể thao tác với dữ liệu. • Tham gia viết và đọc tệp tin.

• Xử lý hầu hết các lệnh và thông điệp trong ứng dụng.

Document liên quan đến việc quản lý và lưu trữ dữ liệu thông qua các biến thành viên của lớp Document.

View là một khung cửa sổ mà qua đó người dùng tương tác với Document, sử dụng các biến trên để truy cập dữ liệu cho việc hiển thị và cập nhật.

3.3 MFC (Microsoft Foundation Classes)

SDI và MDI là 2 kiểu thiết kế hệ thống theo hướng Document-View, cả hai có cùng kiến trúc nhưng lại khác nhau về mục đích, cách hoạt động.

3.3.1 Single-Document Interface (SDI):

SDI là một dạng kiến trúc Document-View. Chỉ cho phép tập trung hiển thị một cửa sổ tài liệu tại một thời điểm.

Ví dụ: Notepad, paint

3.3.2 Multiple-Document Interface (MDI):

MDI là một dạng kiến trúc Document-View. Ở đây cho phép mở nhiều cửa sổ khung tài liệu tại một thời điểm. Ứng dụng MDI có một khung cửa sổ chính, trong đó lại chứa nhiều cửa sổ con, mỗi cửa sổ con chứa một tài liệu riêng biệt. Các cửa sổ trong MDI thể hiện các loại tài liệu có thể giống hoặc khác nhau tùy vào mục đích lập trình.

4 Thiết kế chương trình

4.1 Kiến trúc hệ thống Kiến trúc Document-View MFC (MDI)

4.1 Kiến trúc hệ thống Luồng hoạt động

• Ứng dụng (CWinApp) tạo ta CDocTemplate

• CDocTemplate tạo ra CDocument và Frame Window (CFrameWnd) • Frame window tạo ra View (CView)

CWinApp:

• Class tương ứng của chương trình: class CGeosApp

• Lớp này dùng để quản lý các hàm xử lý chung ở mức ứng dụng như tạo ra các đối tượng cửa sổ chính (CFrameWnd), đối tượng quản lý tài liệu (CDocument), đối tượng quản lý vùng nhìn (CView) và quan hệ giữa những

đối tượng này

CFrameWnd:

• Class tương ứng của chương trình: class CChildFrame • Là khung cửa sổ chứa lớp CView

• Hỗ trợ liên kết giữa một hoặc nhiều view và document.

CMultiDocTemplate:

• Class tương ứng của chương trình: class CMultiDocTemplate • Hỗ trợ điều phối một hoặc nhiều tài liệu hiện có của đối tượng

• Quản lý việc tạo các đối tượng view, document và kiểu của đối tượng được tạo.

CDocument

• Class tương ứng của chương trình: class CGeosDoc

• Chứa các hàm quản lý tài liệu của ứng dụng, thực hiện các thao tác như đọc, ghi tệp tin

4.1 Kiến trúc hệ thống CView

• Class tương ứng của chương trình: class CGeosView

• Chứa các hàm quản lý vùng nhìn, quản lý phần hiển thị tài liệu cho người dùng xem, hầu hết các tác vụ vẽ đều tập trung ở lớp này

• Nơi cung cấp một góc nhìn đầy đủ về dữ liệu do người lập trình xác định. Giúp hiển thị tài liệu, đóng vai trị trung gian giữa tài liệu và người dùng, giúp thao tác với tài liệu.

Luồng thực thi khi mở và lưu một bài tốn

Hình 4.2: Luồng thực thi khi mở và lưu bài tốn

• Khi người dùng mở một Bài tốn mới, chương trình sẽ tạo ra một Document và một cửa sổ View ứng với Document đó. Document sẽ đọc dữ liệu từ tệp tin và truyền vào bài tốn (Problem) sau đó cập nhật hiển thị mơ hình bài tốn trên View.

• Tương tự khi người dùng muốn lưu Bài toán thành tệp tin. Document sẽ chuyển đổi Bài toán thành dữ liệu văn bản và lưu thành tệp tin.

4.1 Kiến trúc hệ thống Kiến trúc Bài tốn (Problem)

Hình 4.3: Cấu trúc của một Bài tốn - Problem• Module Problem:Module Problem:

Ê Chứa dữ liệu của bài tốn: mơ hình (Model), thơng tin hiển thị mơ hình (Render), quản lý các bước (StepManager),...

Ê Quản lý tất cả các tác vụ liên quan đến bài tốn

Module Model: Chứa và quản lý danh sách các hình vẽ của bài tốn

Module Render:

Ê Chứa các thơng số hiển thị riêng của từng mơ hình bài tốn. Đóng vai trị như một Camera lưu vị trí quan sát, góc nhìn, tỉ lệ phóng to thu nhỏ

Ê Chứa các hàm thực hiện việc hiển thị mơ hình ra View, được hiện thực sử dụng các hàm cơ bản của OpenGL

Module StepManager: Quản lý danh sách các bước (Step) và các tác vụ

4.2 Các đối tượng chính của chương trình4.2 Các đối tượng chính của chương trình 4.2 Các đối tượng chính của chương trình

4.2.1 Các class ứng với mơ hình MDI của MFC

• class CGeosApp : public CWinAppEx (MFC) • class CGeosDoc : public CDocument (MFC)

Chứa biến lưu trữ Bài tốn (class Problem) • class CGeosView : public CView (MFC)

• class CMainFrame : public CMDIFrameWndEx (MFC) • class CChildFrame : public CMDIChildWndEx (MFC)

4.2.2 Các class và namespace của mơ hình bài tốn - Prob- lem

class Problem: Ứng với Module Problem của kiến trúc Bài tốn

World m_TypeWorld (Kiểu khơng gian (2D/3D)) SModel m_Model

SRender m_Render StepManager m_StepManager

string m_FilePath (Đường dẫn đến tệp tin của bài tốn) string m_Descriptionn (Mơ tả bài tốn)

Bảng 4.1: Class Problem

class SModel: Ứng với Module Model của kiến trúc Bài toán

Problem m_Parent (Lưu con trỏ tới bài tốn chứa nó) std::vector¡SShape*> m_ListShape (Danh sách các hình vẽ)

4.2 Các đối tượng chính của chương trình

class SFile:

Ê Chứa các hàm hiện thực việc đọc và lưu file của bài toán

Ê Hỗ trợ chuyển đổi mơ hình, các đối tượng sang dữ liệu văn bản

class StepManager: Ứng với Module StepManager của kiến trúc Bài tốn

class Step: Các bước của bài tốn, lưu trữ danh sách các mơ hình được vẽ

và mơ tả của bước đó

class SShape: Là lớp cơ sở của các hình vẽ, được các class hình vẽ ở

namespace World2d và World3d kế thừa Các thuộc tính cơ bản:

World m_TypeWorld (Kiểu không gian (2D/3D)) State m_State (Trạng thái: Ẩn/Hiện)

Color m_Color (Màu sắc) vector¡string> m_Name (Danh sách tên)

Dependency m_Dependency (Sự phụ thuộc của đối tượng vào các đối tượng khác)

Bảng 4.3: Class SShape

namespace World2d: Chứa các class liên quan đến hình vẽ và các thao tác

liên quan trong không gian 2D

Ê class Model : public class SModel

Ê class Render : public class SRender

Ê class File: Hỗ trợ đọc lưu file 2D Ê class Shape : public class SShape

Ê class Point : public class World2d::Shape - Điểm Các loại điểm

∗ Điểm tự do

∗ Điểm ngẫu nhiên nằm trên đoạn thẳng

∗ Điểm nằm trên đoạn thẳng với một tỉ lệ

4.2 Các đối tượng chính của chương trình

∗ Trực tâm

∗ Điểm là hình chiếu của một điểm lên đường thẳng ∗ Điểm là giao điểm giữa 2 đường thẳng

Ê class Vector : public class World2d::Point - Vectơ

Ê class Line: public class World2d::Shape - Đường thẳng và đoạn thẳng Các loại đường thẳng

∗ Đường thẳng đi qua 2 điểm ∗ Đoạn thẳng

∗ Đường thẳng đi qua 1 điểm và có vectơ chỉ phương

∗ Đường thẳng đi qua 1 điểm và song song với đường thẳng khác

Ê class Cirlcle : public class World2d::Shape - Đường tròn

Ê class Polygon : public class World2d::Shape - Đa giác

namespace World3d: Chứa các class liên quan đến hình vẽ và các thao tác

liên quan trong không gian 3D

Ê class Model : public class SModel

Ê class Render : public class SRender

Ê class File: Hỗ trợ đọc lưu file 3D Ê class Shape : public class SShape

Ê class Point : public class World3d::Shape - Điểm Các loại điểm

∗ Điểm tự do

∗ Điểm ngẫu nhiên nằm trên đoạn thẳng, đường thẳng ∗ Điểm nằm trên đoạn thẳng với một tỉ lệ

∗ Điểm ngẫu nhiên nằm trên đa giác ∗ Trực tâm của tam giác

∗ Trọng tâm của đa giác/đa diện

∗ Điểm là hình chiếu của một điểm lên đường thẳng, mặt phẳng ∗ Điểm là giao điểm giữa 2 đường thẳng

4.3 Yêu cầu hệ thốngÊ class Line: public class World2d::Shape - Đường thẳng và đoạn thẳng Ê class Line: public class World2d::Shape - Đường thẳng và đoạn thẳng

Các loại đường thẳng

∗ Đường thẳng đi qua 2 điểm ∗ Đoạn thẳng

∗ Đường thẳng đi qua 1 điểm và có vectơ chỉ phương

∗ Đường thẳng đi qua 1 điểm và song song với đường thẳng khác ∗ Đường thẳng là giao giữa 2 mặt phẳng

Ê class Polygon : public class World3d::Shape Đa giác bao gồm 3 hoặc nhiều điểm hơn tạo thành

Ê class Plane: public class World3d::Shape - Mặt phẳng Các loại Mặt phẳng

∗ Mặt phẳng đi qua 1 điểm và có vectơ pháp tuyến

Một phần của tài liệu Chương trình hỗ trợ dạy và học môn hình học lớp 11 (Trang 35)

Tải bản đầy đủ (PDF)

(92 trang)