Lớp thực hiện một số chức năng chung

Một phần của tài liệu xử lý đồ họa trong matlab phục vụ cho công cụ toán học ở trường phổ thông (Trang 73 - 108)

8. Cấu trúc luận văn

3.3.2.3.Lớp thực hiện một số chức năng chung

Tạo lớp options gồm các hàm:

1. axisOn() hiển thị hệ trục tọa độ 2. axisOff() ẩn hệ trục tọa độ

3. holdOn() cho phép vẽ nhiều đối tƣợng trên một figure 4. holdOff() tắt chế độ vẽ nhiều đối tƣợng trên một figure

5. gridOn() hiển thị đƣờng lƣới trên hệ trục 6. gridOff() tắt đƣờng lƣới trên hệ trục

3.3.2.4. Các bước thực hiện

1. Trong cửa sổ command window của MATLAB gõ lệnh deploytool. Một cửa sổ pop up xuất hiện yêu cầu nhập tên gói, chọn khu vực lƣu giữ, và chọn mục đích deploy là .Net assembly.

Hình 24. Tạo gói thư viện graphics

2. Tạo tên các lớp graphic2d, graphic3d, options và chọn các M-file tƣơng ứng với mỗi lớp đã nêu ở trên.

3. Chọn công cụ build để thực hiện

Hình 26. Build ứng dụng graphics thành công cho .Net

4. Tạo ứng dụng Windows Forms đặt tên là DemoMatlab trong Microsoft Visual Studio 2008

Hình 27. Tạo ứng dụng DemoMatlab trong VS 2008

5. Trong ứng dụng click chuột phải chọn add references để add các đƣờng dẫn đến các file graphics.dll (gói đƣợc build cho .Net ở trên), và MWArray.dll là file thƣ viện của MATLAB cho phép sử dụng các hàm MATLAB trong .Net.

Hình 28. Import các file thư viện cho ứng dụng DemoMatlab

6. Khai báo sử dụng các thƣ viện trong chƣơng trình ứng dụng DemoMatlab using MathWorks.MATLAB.NET.Arrays;

using MathWorks.MATLAB.NET.Utility; using graphics;

7. Xây dựng giao diện C# cho phép nhập tham số gọi các hàm vẽ từ MATLAB

3.4. Kết luận chương 3

Chƣơng trên đã trình bày hệ thống viết bằng ngôn ngữ C#, cho phép truy cập các bài thực nghiệm cho học sinh phổ thông, cho phép họ truy cập đến các hàm đồ họa MATLAB, đồng thời thực hiện các bài tập theo chƣơng trình của giáo viên.

Mỗi học sinh sẽ lựa chọn bộ tham số của bài thực hành để xây dựng hình không gian, rồi thử lại bằng MATLAB. Sau thời gian ứng dụng, học sinh tự kiểm tả đƣợc kiến thức bản thân, tự đánh giá qua hệ thống phần mềm.

Kết luận Kết quả đạt được

Sau thời gian làm luận văn tốt nghiệp, học viên đã đạt đƣợc một số kết quả sau :

1. Tìm hiểu về MATLAB và ứng dụng của nó trong xử lí đồ họa;

2. Khả năng ứng dụng MATLAB để kiểm chứng những phép dựng hình của học sinh phổ thông trung học. Học sinh sẽ thực hiện thực hành theo kịch bản của giáo viên, bằng cách lựa chọn tham số trong chƣơng trình của MATLAB.

3. Trong chƣơng 2 học viên đã nêu một số khả năng dựng hình của MATLAB. Trong chƣơng 3, đƣa ra thí dụ mô phỏng về giao của đƣờng thẳng với mặt cầu.

Hướng tìm hiểu tiếp theo

Bên cạnh những kết quả nghiên cứu đạt đƣợc, luận văn vẫn còn một số các vấn đề hạn chế chƣa đƣợc giải quyết đƣợc nêu ở trên. Mặt khác chƣơng trình demo các kết quả thực nghiệm của luận văn mới đƣa ra đƣợc những chức năng cơ bản minh chứng cho lý thuyết mà chƣa có đầu tƣ nhiều cho một ứng dụng thực tiễn.

Tuy nhiên trong tƣơng lai đề tài này có thể đầu tƣ, phát triển theo các hƣớng phân tích sâu hơn về kỹ thuật để xây dựng một phần mềm có tính ứng dụng trong thực tiễn nhƣ sau :

 Nâng cao kỹ thuật xử lí cho phép các đối tƣợng hiển thị có chất lƣợng hơn về màu sắc, đƣờng nét, bề mặt… giống với thực tiễn hơn.

 Bổ sung bộ công cụ cho phép chỉnh sửa đối tƣợng, bộ công cụ trợ giúp tính toán và hiển thị thông tin.

Trên đây là toàn bộ nghiên cứu của tôi về lý thuyết xử lí đồ họa trong MATLAB phục vụ cho công cụ toán học ở trƣờng phổ thông. Nghiên cứu dựa trên lý thuyết về đồ họa máy tính, phƣơng pháp tọa độ hình học PT, ứng dụng đồ họa và ngôn ngữ lập trình MATLAB. (adsbygoogle = window.adsbygoogle || []).push({});

Tài liệu tham khảo Tiếng việt

1. Dƣơng Anh Đức (2006), Đồ họa máy tính, NXB Đại Học Quốc Gia

TP.HCM.

2. Nguyễn Hoàng Hải, Nguyễn Khắc Kiểm, Nguyễn Trung Dũng, Hà Trần Đức (2003), Lập trình Matlab, Nhà xuất bản Khoa học và Kỹ thuật.

3. Trần Văn Hạo (Tổng chủ biên) (2010), SGK Hình học 10, 11, 12, Nhà xuất bản giáo dục Việt Nam.

4. Lê Tấn Hùng, Huỳnh Quyết Thắng (2008), Kỹ thuật đồ họa, Nhà xuất bản

Khoa học và Kỹ thuật, tái bản lần IV.

5. Khoa Công nghệ Thông tin, trƣờng Đại học Khoa học Huế (2003), Giáo trình đồ họa máy tính.

6. Nguyễn Bá Kim, Đinh Nho Chƣơng, Nguyễn Mạnh Cảng, Vũ Dƣơng Thụy, Nguyễn Văn Thƣờng (1994), Phương pháp dạy học môn toán, Nhà xuất bản giáo dục Việt Nam.

7. Đoàn Quỳnh (1998), Đại số tuyến tính và hình học giải tích, NXB ĐHQG

Hà Nội.

8. Đoàn Quỳnh (Tổng chủ biên) (2008), SGK Hình học nâng cao 10, 11, 12,

Nhà xuất bản giáo dục Việt Nam.

Tiếng anh

9. Ian Griffiths, Matthew Adams, Jesse Liberty (2010), Programming C# 4.0, Sixth Edition, O‟Reilly Media, Inc.

10. LePhan (2010), Matlab – C# for Engineers.

Phụ lục

1. Đồ họa MATLAB

1.1. Đồ họa phẳng

1.1.1. Lệnh vẽ plot

Phần lớn lớn các câu lệnh để vẽ đồ thị trong mặt phẳng đều là lệnh plot. Lệnh plot tạo ra một cửa sổ đồ họa gọi là figure, trong cửa sổ này nó sẽ tạo độ chia phù hợp với dữ liệu, vẽ đƣờng thẳng qua các điểm, và đồ thị đƣợc tạo thành bởi việc nối các điểm này là đƣờng nét liền, các thang chia dấu và số đƣợc tự động cập nhật, nếu cửa sổ figure đã tồn tại, lệnh plot xóa cửa sổ hiện thời và thay vào đó cửa sổ mới. Ví dụ vẽ đồ thị hàm y = sinx trong đoạn [0, 2 ], ta thực hiện phân hoạch đoạn [0, 2 ] thành 30 điểm dữ liệu bằng hàm linspce trong MATLAB theo chiều ngang của đồ thị, các điểm này đƣợc chứa trong vecto x, sau đó tạo một vecto y là hàm sin của dữ liệu chứa trong x. Lệnh vẽ đƣợc thực hiện nhƣ sau:

>> x = linspace(0, 2*pi, 30); >> y = sin(x);

>> plot(x, y);

Hình 30. Vẽ đồ thị bằng lệnh plot

Lệnh plot cho phép vẽ đồng thời nhiều đồ thị trên cùng một hình vẽ bằng việc đƣa thêm vào lệnh plot các cặp đối số tƣơng ứng, các đồ thị đƣợc biểu diễn bằng các màu khác nhau trên hình vẽ để tiện phân biệt. Ví dụ biểu diễn hai đồ thị sinx và cosx trên cùng một hình.

>> x = linspace(0, 2*pi, 30); >> y = sin(x);

>> z = cos(x); >> plot(x, y, x, z);

Hình 31. Vẽ 2 đồ thị đồng thời

1.1.2. Kiểu đường, dấu và màu

Mặc định MATLAB chọn kiểu nét vẽ solid và màu blue cho đồ thị. Ngoài ra MATLAB cho phép khai báo kiểu màu, nét vẽ theo yêu cầu ta cần hiển thị bằng việc đƣa vào lệnh plot một đối số thứ 3 sau mỗi cặp dữ liệu của mảng. Các đối số tùy chọn này là một xâu ký tự, có thể chứa một hay nhiều hơn theo bảng bên dƣới. (adsbygoogle = window.adsbygoogle || []).push({});

>> x = linspace(0, 2*pi, 30); >> y = sin(x);

>> z = cos(x);

>> plot(x, y, 'b:p' , x, z, 'm+');

Bảng 4. Bảng thuộc tính đường đồ thị

Màu Kiểu đƣờng Đánh dấu

Tên Giá trị Tên Giá trị Tên Giá trị

Xanh da trời B Nét liền - Dấu x X

Xanh lá cây G Hai chấm : Dấu cộng +

Đỏ R Chấm vạch -. Hoa thị *

Lục lam C Gạch ngang -- Hình vuông S

Tím M Điểm . Hình tròn O

Vàng Y Kim cƣơng D

Đen K Tam giác lên V

Trắng W Tam giác xuống ^

Tam giác trái >

Tam giác phải <

Ngôi sao P

Ngôi sao 6 cạnh H

1.1.3. Đồ thị lưới, hộp chứa trục, nhãn, chú thích

Để hiện hay ẩn các đƣờng lƣới trong đồ thị hiện tại MATLAB cung cấp cặp lệnh grid on, và grid off. Mặc định MATLAB chọn lệnh ẩn lƣới grid off . Thông thƣờng trên mỗi hình vẽ đều có một khung trục tọa độ hình chữ nhật kiểu solid bao quanh gọi là hộp chứa trục, để hiển thị hay ẩn hộp chứa trục ta sử dụng cặp lệnh box on và box off. Ngoài ra ta có thể gán nhãn cho các trục tọa độ bằng các lệnh xlabel, ylabel, và định tiêu đề cho đồ thị qua lệnh title. Lệnh text cho phép ta có thể thêm nhãn hoặc một chuỗi kí tự vào bất kỳ vị trí nào của hình theo định dạng text(x, y, „string‟).

>> x = linspace(0, 2*pi, 30); >> y = sin(x); >> z = cos(x); >> plot(x, y, 'b:p' , x, z, 'm+'); >> box off; >> xlabel('x-axis'); >> ylabel('y-axis');

>> title('Sine and Cosin Curve'); >> text(2.5, 0.7, 'sin(x)'););

Hình 33. Biểu diễn chú thích, ký hiệu

1.1.4. Hệ trục tọa độ

MATLAB cung cấp công cụ để có thể kiểm soát hoàn toàn hình dáng và thang chia của cả hai trục đứng và ngang với lệnh axis. Các đặc tính cơ bản của lệnh axis đƣợc liệt kê trong bảng dƣới đây.

Bảng 5. Bảng đặc tính cơ bản của hệ trục tọa độ

Lệnh Mô tả

Axis([xmin xmax ymin ymax]) Thiết lâp các giá trị max, min của hệ trục

Axis auto Trả lại giá trị mặc định cho thang chia

Axis xy Sử dụng hệ tọa độ Descarters trong đó gốc (adsbygoogle = window.adsbygoogle || []).push({});

tọa độ ở góc thấp nhất bên trái, trục ngang tăng từ trái qua phải, trục đứng tăng từ dƣới lên trên.

Axis ij Sử dụng hệ tọa độ ma trận, trong đó gốc tọa

độ ở đỉnh góc trái, trục đứng tăng từ đỉnh xuống, trục ngang tăng từ trái qua phải.

Axis square Thiết lập đồ thị hiện tại là hình vuông so với mặc định là hình chữ nhật.

Axis equal Thiết lập thang chia giống nhau cho cả hai

trục

Axis normal Tắt chế độ axis equal

Axis off Tắt bỏ chế độ nền trục, nhãn, lƣới, và hộp,

dấu. Thoát bỏ chế độ lệnh title, và bất cứ lệnh label nào thay vào chế độ lệnh text và gtext.

Axis on Ngƣợc lại lệnh axis off

1.1.5. Thao tác với đồ thị

Để thêm các nét vẽ vào đồ thị, hoặc vẽ một đồ thị mới trong cùng figure, trong MATLAB dùng lệnh hold on. Khi lệnh hold on đƣợc thiết lập hệ trục đã tồn tại không bị thay đổi khi ta tiếp tục gọi hàm plot, nó sẽ thêm đồ thị mới vào hệ trục hiện tại. Tuy nhiên nếu dữ liệu không phù hợp với hệ trục tọa độ cũ, thì trục đƣợc chia lại. Thiết lập hold off sẽ bỏ đi cửa sổ figure hiện tại và thay vào đó bằng một đồ thị mới. >> x = linspace(0, 2*pi, 30); >> y = sin(x); >> plot(x, y); >> hold on; >> z = cos(x); >> plot(x, z);

Ngoài ra một figure có thể chứa nhiều hơn một hệ trục. Lệnh subplot(m, n, p) chia cửa sổ hiện tại thành một ma trận mxn cửa sổ nhỏ để vẽ đồ thị, và chọn p là cửa sổ hoạt động. Các đồ thị thành phần đƣợc đánh số từ trái qua phải, từ trên xuống dƣới, sau đó đến hàng thứ hai.

>> x = linspace(0, 2*pi, 30); >> y = sin(x); >> z = cos(x); >> subplot(2, 2, 1); >> plot(x, y); >> subplot(2, 2, 2); >> plot(x, z);

Hình 34. Hiển thị đa cửa sổ trên một figure

1.2. Đồ họa không gian

1.2.1. Vẽ đường trong không gian

Tƣơng tự lệnh plot trong không gian hai chiều, lệnh plot3 rất mạnh về vẽ đƣờng trong không gian ba chiều. Lệnh plot3 cho phép chúng ta vẽ đƣờng thẳng, đƣờng cong, xoắn ốc, gấp khúc tùy thuộc ma trận dữ liệu đầu vào. Ngoài ra lệnh plot3 cũng cho phép chúng ta vẽ nhiều đồ thị đồng thời, và có các tùy chọn cho việc khai báo màu, tạo biểu tƣợng hoặc kiểu đƣờng theo từng yêu cầu. Lệnh plot3 có định dạng plot3(X1, Y1, Z1, S1, X2, Y2, Z2, S2, …), trong đó Xn, Yn, Zn là các vecto hoặc ma trận Sn là xâu kí tự tùy chọn khai báo màu, tạo biểu tƣợng, hoặc kiểu đƣờng. Ví dụ vẽ đƣờng xoắn ốc x = sin(t), y = cos(t), z = t.

>> t = linspace(0, 6*pi, 300); >> plot3(sin(t), cos(t), t); >> title('Helix'), xlabel('sin(t)'); >> ylabel('cos(t)'), zlabel('t') ; >> grid;

1.2.2. Đồ thị bề mặt, lưới trong không gian

MATLAB định nghĩa bề mặt lƣới bằng các điểm theo hƣớng trục z ở trên đƣờng kẻ ô hình chữ nhật lên mặt phẳng (Oxy). Sau khi nối các điểm gần kề với nhau đƣợc một đồ thị trông nhƣ một mạng lƣới với các mắt lƣới là các điểm dữ liệu.

Để vẽ hàm hai biến z = f(x, y) ta xây dựng ma trận dữ liệu X, Y sao cho X là ma trận có các hàng của nó là bản sao của vecto x, và ma trận Y có các cột của nó là bản sao của vecto Y, trong MATLAB hàm meshgrid cung cấp cho ta chức năng này. Cặp ma trận X, Y sau đó đƣợc dùng để ƣớc lƣợng ma trận giá trị của hàm hai biến z dùng đặc tính toán học về mảng của Matlab. Ví dụ vẽ hàm z = x2

+ y2 >> x = -10:.5:10; >> y = x; >> [X, Y] = meshgrid(x, y); >> Z = X.^2 + Y.^2; >> mesh(X, Y, Z);

Hình 36. Đồ thị lưới trong không gian

1.2.3. Bảng màu

MATLAB định một biểu đồ màu nhƣ là một ma trận có ba cột, mỗi hàng của ma trận định nghĩa một màu riêng biệt sử dụng các số trong dải 0 và 1. Những số này chỉ ra giá trị RGB, độ nhạy của các màu thành phần đỏ, xanh lá cây, và xanh da trời trong một màu do các thành phần đó tạo ra.

Bảng 6. Bảng màu

Đỏ Xanh lá cây Xanh da trời Màu

0 0 0 Đen 1 1 1 Trắng 1 0 0 Đỏ 0 1 0 Xanh lá cây 0 0 1 Xanh da trời 1 1 0 Vàng 1 0 1 Tím đỏ 0 1 1 Lam

Hàm plot3 không dùng bảng màu trên, chúng dùng các màu liệt kê trong bảng kiểu đƣờng, điểm đánh dấu, màu của hàm plot trong không gian hai chiều. Phần lớn bảng màu đƣợc sử dụng cho các hàm vẽ mặt, lƣới nhƣ mesh, surf, fill3, contour và các biến của nó. (adsbygoogle = window.adsbygoogle || []).push({});

2. Phương pháp toạ độ

Bộ môn hình học ở nhà trƣờng phổ thông đƣợc chia thành hai phần là hình học phẳng 2D và hình học không gian 3D. Hình học phổ thông đƣợc nghiên cứu theo ba phƣơng pháp: phƣơng pháp tiên đề, phƣơng pháp vecto và phƣơng pháp tọa độ. Phƣơng pháp tọa độ cho phép giải tích hóa, đại số hóa hình học. Tức là cho phép chuyển những khái niệm hình học cũng nhƣ những mối quan hệ giữa những đối tƣợng hình học sang những khái niệm đại số và quan hệ đại số. Mỗi điểm sẽ đƣợc biểu diễn bằng một bộ số thực duy nhất trong hệ trục tọa độ và ngƣợc lại, còn các đƣờng và mặt sẽ đƣợc biểu diễn tƣơng ứng với một phƣơng trình, việc xác định vị trí, giao điểm, khoảng cách giữa các đối tƣợng này sẽ thông qua việc giải các phƣơng trình đại số hay biểu thức tính toán đại số.

Chính vì lí do này mà phƣơng pháp tọa độ đƣợc coi là phƣơng pháp hiện đại. Nhờ nó mà Toán học và Hình học nói riêng đã vƣợt qua một thời kì gọi là toán học sơ cấp để chuyển sang một thời kì mới, giai đoạn Toán học cao cấp. Ngày nay sử dụng phƣơng pháp tọa độ cho phép máy tính mã hóa và xử lí các chƣơng trình đồ họa đƣợc thực hiện thuận lợi hơn.

3. Phương pháp tọa độ trong hình học phẳng

3.1. Hệ tọa độ Descartes

Trong mặt phẳng, cho hai trục x‟Ox, y‟Oy vuông góc với nhau tại điểm O. Gọi ; i j

lần lƣợt là hai vecto đơn vị trên các trục x‟Ox, y‟Oy. Hệ hai trục nhƣ trên gọi là hệ trục tọa độ Descartes vuông góc (Oxy).

Điểm O gọi là gốc của hệ trục tọa độ, x‟Ox đƣợc gọi là trục hoành, y‟Oy gọi là trục tung.

Hình 37. Hệ tọa độ Descartes (Oxy)

3.2. Vecto trong mặt phẳng

3.2.1. Tọa độ vecto

Trong hệ trục tọa độ Descartes mỗi vecto u

đƣợc biểu diễn bằng cặp số duy nhất (x; y) thỏa mãn hệ thức: ( ; )u x y   uxiy j. Khi đó (x;y) đƣợc gọi là tọa độ của vecto u

Hình 38. Vecto trong mặt phẳng

Cho hai điểm A(x1, y1), B(x2, y2) vecto AB

có tọa độ: AB

= (x2-x1, y2-y1).

3.2.2. Các phép toán vecto

Cho hai vecto u x y( ;1 1)

, v x y( ;2 2)

ta có công thức các phép toán sau :

u  v (x1x y2; 1 y2);  u  v (x1x y2; 1y2) ;  ku (kx ky1; 1);  u  vx x1 2y y1 2 0;  uv x x1 2 y y1 2;  2 2 1 1 u  xy ;  1 2 1 2 2 2 2 2 1 1 2 2 cos( ; ) . ( )( ) uv x x y y u v u v x y x y           3.3. Đường thẳng trong mặt phẳng

Trong hệ trục tọa độ Descarters (Oxy) mỗi đƣờng thẳng đƣợc biểu diễn bởi

Một phần của tài liệu xử lý đồ họa trong matlab phục vụ cho công cụ toán học ở trường phổ thông (Trang 73 - 108)