4. Vẽ hình và mặt cong 3D
Vẽ các mặt cong 3D
Ví dụ: Vẽ mặt cong f (x, y) = sin(x)cos(y), với x thuộc [-pi, pi]; y thuộc [-pi, pi]
Sử dụng lệnh surf : dựng một lưới tọa độ gồm 2 phần tử x, y, kết hợp với độ cao z để xác định được các điểm trên mặt cong, sau đó nối các điểm đó tạo thành 1 mặt.
Để tạo ma trận tính các tọa độ z có thể làm 1 trong 2 cách:
dùng vòng lặp: cách này tốn thời gian và công sức, ít dùng
dùng hàm build-in: meshgrid
>> x = -pi:0.1:pi; % Tạo các vector x, y
>> y = -pi:0.1:pi;
>>[X,Y] = meshgrid(x,y); % Tạo lưới tọa độ [X,Y]
>> Z = sin(X).*cos(Y); % Tạo tọa độ Z
>> surf(X,Y,Z) % Vẽ mặt cong. Kết quả như sau:
Giống như lệnh plot, lệnh surf có những tùy chỉnh, bạn hãy thử đánh các lệnh sau để xem hiệu quả của chúng
>> shading faceted
>> shading flat
>> shading interp
>> colormap(gray)
Để vẽ đồ thị các đường đồng mức 2 chiều, sử dụng lệnh contour
>> contour (X,Y,Z, 'LineWidth', 2)
% Lệnh này sử dụng các tham số giống như lệnh surf
% Màu sắc trên đồ thị thu được sẽ thể hiện cao độ khác nhau
% Tùy chỉnh 'LineWidth' giúp thay đổi độ dày của nét vẽ
% Với lệnh này, bạn cũng có thể thay đổi cách đánh màu
>> hold on % Giữ đồ thị đang có và vẽ tiếp đồ thị tiếp theo vào cùng 1 figure
>> mesh(X,Y,Z)
Bài tập
Sửa lại hàm plotSin để thực hiện việc sau:
1. Nếu đầu vào là 2 tham số, tính hàm sau:
Z = sin(f1*x) + sin(f2*y)
với y tính giống x, chỉ khác là f1 thay bởi f2 (gợi ý: dùng meshgrid để tính X, Y => tính Z)
2. Chia đồ thị thành 2 phần, phần trên vẽ các đường đồng mức của đồ thị dùng lênh contour. Phần dưới vẽ mặt cong với lệnh surf.
Hướng dẫn: sửa hàm plotSin như sau:
function plotSin(f1,f2)
x = linspace(0,2*pi,round(16*f1)+1);
figure
if nargin == 1
plot(x,sin(f1*x)),'rs--','LineWidth',2,'MarkerFaceColor','k');
elseif nargin == 2
y = linspace(0, 2*pi, round(16*f2) +1);
[X, Y] = meshgrid(x, y);
Z = sin(f1*X)+sin(f2*Y);
subplot(2,1,1);
contour(X,Y,Z,'LineWidth',2);
subplot(2,1,2);
surf(X, Y, Z);
end
MATLAB hỗ trợ nhiều loại đồ thị đặc biệt khác
đồ thị tọa độ cực: lệnh polar . Ví dụ
>> polar(0:0.01:2*pi,cos((0:0.01:2*pi)*2))
biểu đồ dạng cột, lệnh bar . Ví dụ
>> bar(1:10, rand(1,10));
lệnh quiver - để vẽ thêm đạo hàm trên đồ thị
>> [X, Y] = meshgrid(1:10, 1:10);
>> quiver(X,Y,rand(10), rand(10);
lệnh stair - để vẽ các hàm hằng rời rạc
>>stairs(1:10, rand(1,10));
lệnh fill - vẽ và tô màu một hình đa giác
>> fill([0 1 0.5], [0 0 1], 'r');
Để biết rõ hơn về các loại đồ thị, sử dụng lệnh help hoặc gõ >> doc specgraph để xem toàn bộ các loại đồ thị được hỗ trợ.