Kết quả thực hiện qua giao diện C#

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 68 - 108)

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

3.2.1.3.Kết quả thực hiện qua giao diện C#

3.2.2. Đường thẳng tiếp xúc với mặt cầu

Gọi (P) là mặt phẳng chứa (d) và O, khi đó mặt phẳng (P) sẽ cắt mặt cầu theo đƣờng tròn lớn tâm O bán kính r. Mọi điểm M  (d) khác H ta có: OM > OH. Nhƣ vậy H là điểm chung duy nhất của mặt cầu S(O, r) và đƣờng thẳng (d). Ta có hình vẽ mô phỏng cho trƣờng hợp này thƣờng đƣợc vẽ nhƣ sau:

Hình 20. Hình vẽ đường thẳng tiếp xúc mặt cầu trong SGK

3.2.2.1. Giải tích hóa các đối tượng cơ sở

Từ mô phỏng trên ta tiến hành giải tích hóa các đối tƣợng cần biểu diễn gồm: mặt phẳng (P), mặt cầu S(O, r), đƣờng thẳng (d), điểm O, H, khoảng cách OH nhƣ sau:

1. Chọn hệ trục tọa độ có giới hạn tọa độ của ba trục trên đoạn [-8 8]

2. Chọn mặt phẳng (P) là mặt phẳng (Oxy): qua điểm O(0; 0; 0) có cặp vecto chỉ phƣơng i

(1; 0; 0), j

(0; 1; 0).

3. Mặt cầu tâm O(0; 0; 0) bán kính r = 4; 4. Cho z = 0, xét trong mặt phẳng (Oxy):

+ Gọi H(2 2; 2 2 ) là một giao điểm của đƣờng thẳng y = x và đƣờng tròn

x2 + y2 = 42.

+ Dựng đƣờng thẳng (d) qua H( 2 2; 2 2  ) và vuông góc với đƣờng thẳng y = x. Khi đó đƣờng thẳng (d) có phƣơng trình là y = - x - 4 2 .

x = -8, và y = -8. Ta có tọa độ của A, B: A: 8 8 4 2 x y        B: 8 4 2 8 x y        

3.2.2.2. Thực hiện vẽ đối tượng

Thực hiện theo các bƣớc:

1. Chọn hệ trục tọa độ có giới hạn ba trục trên đoạn [-8 8] 2. Vẽ mặt phẳng (P) qua O(0; 0; 0) có cặp vecto chỉ phƣơng i

(1; 0; 0), j

(0; 1; 0).

3. Vẽ mặt cầu tâm O(0; 0; 0) bán kính r = 4.

4. Vẽ đƣờng thẳng (d) qua H( 2 2; 2 2  ;0) có vecto chỉ phƣơng u

(1;-1;0), hoặc vẽ đoạn thẳng AB chính là biểu diễn của đƣờng thẳng (d).

5. Vẽ và gán nhãn các điểm O, H. 6. Vẽ đoạn thẳng OH.

3.2.2.3. Kết quả thực hiện qua giao diện C#

3.2.3. Đường thẳng cắt mặt cầu tại hai điểm phân biệt

Hình 22. Đường thẳng cắt mặt cầu tại hai điểm phân biệt (SGK)

3.2.3.1. Giải tích hóa đối tượng cơ sở

1. Chọn hệ trục tọa độ có giới hạn tọa độ của ba trục trên đoạn [-8 8].

2. Chọn mặt phẳng (P) là mặt phẳng (Oxy) đi qua điểm O(0; 0; 0) có cặp vecto chỉ phƣơng i

(1; 0; 0), j

(0; 1; 0). (adsbygoogle = window.adsbygoogle || []).push({});

3. Mặt cầu tâm O(0; 0; 0) bán kính r = 4. 4. Cho z = 0, xét trong mặt phẳng (Oxy):

+ Dựng đƣờng thẳng (d) qua M(-4; 0), N(0; -4) + (d) : y = - x - 4

+ Gọi H là giao điểm của đƣờng thẳng y = x và đƣờng thẳng (d): H(-2; -2)

3.2.3.2. Kịch bản vẽ mô phỏng

1. Chọn hệ trục tọa độ có giới hạn ba trục trên đoạn [-8 8] 2. Vẽ mặt phẳng (P) qua O(0; 0; 0) có cặp vecto chỉ phƣơng i

(1; 0; 0), j

(0; 1; 0).

3. Vẽ mặt cầu tâm O(0; 0; 0) bán kính r = 4.

4. Vẽ đƣờng thẳng (d) qua hai điểm M(-4; 0; 0), N(0; -4; 0).

5. Vẽ và gán nhãn các điểm O(0; 0; 0), H(-2; -2; 0), M(-4; 0; 0), N(0; -4; 0). 6. Vẽ đoạn thẳng OH.

3.2.3.3. Kết quả thực hiện qua giao diện C#

Hình 23. Mô phỏng MATLAB đường thẳng cắt mặt cầu tại hai điểm

3.3. Giao diện C# truy cập bài thực hành

Để tiện cho học sinh phổ thông tiếp cận chƣơng trình, luận văn thể hiện bài thực hành, với nhiều mẫu thực hành khác nhau, trong hệ thống đƣợc viết bằng ngôn ngữ C#. Hệ thống truy cập các hàm đồ họa của MATLAB và hƣớng dẫn học sinh thực hiện.

3.3.1. Giới thiệu

MATLAB là môi trƣờng tính toán gồm nhiều công cụ, MATLAB compiler và MATLAB builder for .NET là các công cụ quan trọng nhất hỗ trợ lập trình tính toán trong C# sử dụng các hàm MATLAB. Chúng ta có thể sử dụng MATLAB builder for .Net để tạo một lớp (Class) từ các M-files trong MATLAB và các hàm đƣợc sinh ra từ lớp này có thể đƣợc triệu gọi từ các hàm trong C#.

3.3.2. Tạo lớp đồ họa từ các hàm trong MATLAB cho C#

Để thực hiện ta xây dựng hai lớp graphic2d và graphic3d lần lƣợt chứa các hàm vẽ đối tƣợng đƣợc xử lí trong MATLAB tƣơng ứng thuộc hình học phẳng 2D và hình học không gian 3D, lớp options chứa các hàm cho phép ngƣời sử dụng tƣơng tác lựa chọn thực hiện một số thao tác trên figure chứa đồ thị hiện thời, cụ thể nhƣ sau:

3.3.2.1. Lớp đồ họa 2D

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

1. Point2d() vẽ điểm

2. Axis2d() vẽ và định giới hạn hệ trục cần biểu diễn

3. Label2d() gán nhãn điểm 4. Segment2d() vẽ đoạn thẳng 5. Line2d() vẽ đƣờng thẳng 6. Vecto2d() vẽ vecto 7. Circle2d() vẽ đƣờng tròn 8. Arc2d() vẽ cung tròn 9. Elip2d() vẽ elip 10. clipingLine2d() xén đƣờng thẳng

11. getPointPosOnLine2d() xác định vị trí của một điểm trên đƣờng thẳng 12. getIntersectLines2d() xác định giao điểm giữa các đƣờng thẳng 13. getDistances2d() xác định khoảng cách giữa các đối tƣợng

3.3.2.2. Lớp đồ họa 3D

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

1. Point3d() vẽ điểm

2. Axis3d() vẽ và định giới hạn hệ trục cần biểu diễn 3. Label3d() tạo nhãn điểm, ký hiệu

4. Segment3d() vẽ đoạn thẳng 5. Vecto3d() vẽ vecto 6. Line3d() vẽ đƣờng thẳng 7. Plane3d() vẽ mặt phẳng 8. Circle3d() vẽ đƣờng tròn 9. Arc3d() vẽ cung tròn 10. Polyhedron3d() vẽ đa diện 11. Sphere3d() vẽ mặt cầu 12. Cone3d() vẽ mặt nón 13. Cylinder3d() vẽ mặt trụ

14. getPointPosOnLine3d() xác định vị trí của điểm với đƣờng thẳng 15. getIntersectLines3d() giao điểm các đƣờng thẳng (adsbygoogle = window.adsbygoogle || []).push({});

16. getIntersectLineAndPlane3d() giao điểm của đƣờng thẳng và mặt phẳng 17. rotOx3d() phép xoay quanh trục Ox

18. rotOy3d() phép xoay quanh trục Oy 19. rotOz3d() phép xoay quanh trục Oz 20. translation3d() phép tịnh tiến

21. transform3d() ma trận biến đổi từ hệ tọa độ địa phƣơng sang hệ tọa độ toàn cục.

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 (adsbygoogle = window.adsbygoogle || []).push({});

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.

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. (adsbygoogle = window.adsbygoogle || []).push({});

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

>> 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. (adsbygoogle = window.adsbygoogle || []).push({});

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

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à

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 68 - 108)