9/3/2019
1
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 1
Giảng viên: Ths. Trần Kim Bằng
Bộ môn Cơ Kỹ Thuật, P.106B4
Khoa Khoa Học Ứng Dụng
Đại học Bách Khoa TpHCM
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 2
Chương 7
Đồ họa ba chiều trong
Matlab
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật
Matlab® – Matrix Laboratory 3
7.1. Đồ thị dạng đường trong không gian ba chiều
Code Matlab:
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
xlabel('sin(t)')
ylabel('cos(t)')
zlabel('t')
axis square;
grid on;
text(0,0,0, 'Origin')
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật
Matlab® – Matrix Laboratory 4
Vẽ nhiều đường cong 3 chiều
Code Matlab:
x=linspace(0,3*pi);
z1=sin(x);
z2=sin(2*x);
z3=sin(3*x);
y1=zeros(size(x));
y3=ones(size(x));
y2=y3/2;
plot3(x,y1,z1,y2,z2,x,x,y3,z3)
plot3(x,y1,z1,x,y2,z2,x,y3,z3)
xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis')
grid on
Trục x
Trục y
Trục z
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 5
Code Matlab:
[X,Y] = meshgrid([-2:0.1:2]);
Z = X.*exp(-X.^2-Y.^2);
plot3(X,Y,Z)
xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis')
grid on
Vẽ ma trận các dữ liệu
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 6
7.2. Đồ thị dạng lưới
Code Matlab:
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
mesh(X,Y,Z)
xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis')
Đồ thị dạng lưới sử dụng lệnh
mesh(X,Y,Z)
Để thấy luôn lưới mặt khuất ta dùng lệnh
hidden off
Ngoài ra còn nhiều loại đồ thị lưới khác
meshc(X,Y,Z) %Đồ thị lưới có các đường mức
meshz(X,Y,Z) %Đồ thị lưới với mặt phẳng zero
9/3/2019
2
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 7
7.3. Đồ thị dạng mặt cong
Để vẽ đồ thị mặt ta dùng lệnh
surf(X,Y,Z)
Code Matlab:
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
surf(X,Y,Z)
Để bỏ đi đường lưới ta dùng lệnh
shading flat
Để làm mịn vùng màu
shading interp
Thêm một giá trị
cùng để Z không bị
suy biến khi R = 0
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 8
Ngoài ra còn nhiều loại đồ thị dạng mặt cong khác khác
surfc(X,Y,Z) %Đồ thị mặt có các đường mức
surfl(X,Y,Z) %Đồ thị mặt có hiệu ứng ánh sáng
surfnorm(X,Y,Z) %Đồ thị mặt có pháp tuyến
Code Matlab:
[X,Y,Z] =peaks(30); %biểu diễn phân phối Gauss, có thể tăng s
điểm biều diễn bằng cách tăng n>30
surfl(X,Y,Z)
shading interp
colormap pink
surfnorm(X,Y,Z) % hiển thị pháp tuyến của mặt cong
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật
Matlab® – Matrix Laboratory 9
7.4. Đồ thị dạng đường mức
Để vẽ đồ thị đường mức ta dùng lệnh
contour(X,Y,Z,N) %Đồ thị đường mức 2 chiều
contour3(X,Y,Z,N) %Đồ thị đường mức 3 chiều
pcolor(X,Y,Z) %Đồ thị chuyển cao độ tỉ lệ với màu
contourf(X,Y,Z,N) %Đồ thị đường mức 2 chiều có màu
Code Matlab:
[X,Y,Z] =peaks;
contour(X,Y,Z,20)
contour3(X,Y,Z,20) %Đường mức 3 chiều
pcolor(X,Y,Z) %Đồ thị màu cao độ
shading interp
contourf(X,Y,Z,20)
Vẽ đường mức 2 chiều
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật
Matlab® – Matrix Laboratory 10
Để chú thích độ cao trong đồ thị đường mức, ta dùng lệnh clabel(C)
Code Matlab:
[X,Y,Z] =peaks;
N = 10;
C = contour(X,Y,Z,N); % tương tự cho contour3 và contourf
clabel(C)
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 11
7.5. Phổ màu ba chiều
Để biểu diễn sự thay đổi một đại lượng trên một miền
diện tích trong không gian ba chiều bằng màu sắc, ta
dùng lệnh fill3(x,y,z,c)
X = [x(1) x(2) x(3) … x(n)]
Y = [y(1) y(2) y(3) … y(n)]
Z = [z(1) z(2) z(3) … z(n)]
C = [c(1) c(2) c(3) … c(n)]
fill3(X,Y,Z,C)
Code Matlab:
X = [0 1 1 2;1 1 2 2;0 0 1 1];
Y = [1 1 1 1;1 0 1 0;0 0 0 0];
Z = [1 1 1 1;1 0 1 0;0 0 0 0];
C = [0.5000 1.0000 1.0000 0.5000; 1.0000 0.5000 0.5000 0.1667;
0.3330 0.3330 0.5000 0.5000];
fill3(X,Y,Z,C)
Giá trị c(3) ứng với vị trí x(3), y(3) và z(3)
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 12
7.6. Một số lệnh đồ họa ba chiều đặc biệt
7.6.1. Lệnh patch
Lệnh patch vẽ và tô màu các mặt để ghép thành hình ba chiều
Code Matlab:
x=[0 0 0 0; 0 1 1 0;0 1 1 0]';
y=[0 1 1 0; 0 0 0 0;1 1 1 1]';
z=[0 0 1 1; 0 0 1 1;0 0 1 1]';
patch(x,y,z,-z)
axis square
view([35,35])
zlabel('z'), ylabel('y')
9/3/2019
3
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 13
Vẽ mô hình máy bay bằng lệnh patch
Code Matlab:
fx=[6.6 5.3 2.3 1.5 -2 -2.5 -10 -10 0 5.3
5.3]';
fy=zeros(11,1);
fz=[1.2 1.7 1.9 1.2 1.2 2.6 1.1 0.7 -0.2 0.3
0.8]';
cx=[2.3 0 -2.5 -2 1.5]';
cy=zeros(5,1);
cz=[1.9 3.1 2.6 1.2 1.2]';
wingx=2.3*[1 -3 -3 -3+.6 -3+.6 -3 -3 -3+.6 -
3+.6 -3 -3 1]'/4;
wingy=[8.5 8.5 7.8 7.8 2.2 2.2 -2.2 -2.2 -7.8
-7.8 -8.5 -8.5]';
wingz=zeros(12,1);
ax=2.3*[-3+.6 -3 -3 -3+.6]'/4;
ay=[7.8 7.8 2.2 2.2]';
az=zeros(4,1);
hsx=1.3*[0 -1 -1 0]'-8.1;
hsy=5.1*[1 1 -1 -1]'/2;
hsz=0.7*ones(4,1);
ex=0.6*[0 -1 -1 0]'-9.4;
ey=5.1*[1 1 -1 -1]'/2;
ez=0.7*ones(4,1);
vsx=[0 -1.7 -2.7 -1.8]'-7.3;
vsy=zeros(4,1);
vsz=[1.65 4.5 4.5 1.25]';
rx=[-2.7 -3.3 -3.1 -1.8]'-7.3;
ry=zeros(4,1);
rz=[4.5 4.5 1.5 1.25]';
pf=patch(fx,fy,fz,'c');
pw=patch(wingx,wingy,wingz,'c');
pc=patch(cx,cy,cz,'b'); ps=patch([hsx
vsx],[hsy vsy],[hsz vsz],'c');
pu=patch([ax ax ex rx],[ay -ay ey ry],[az az
ez rz],'m');
axis equal, axis off, view(135,20)
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 14
7.6.2. Lệnh cylinder
Lệnh cylinder nh tọa độ các điểm tạo nên hình ng, để mặc định thì lệnh
sẽ vẽ đường ống có bán kính là 0.5 và chiều cao bằng 1
Code Matlab:
[x, y, z] = cylinder(16);
surf(x, y, z)
Code Matlab:
zz = linspace(0, 2*pi, 26); % Tạo biên dạng theo ý muốn
[x, y, z] = cylinder(1.1+sin(zz), 16);
surf(5*x, 2*y, z*30)%Thay đổi kích thước theo phương x, phương y và phương z
hold on
surf(5*x+6, 2*y+7, z*30-10)%thay đổi kích thước và dịch chuyển theo phương x,
y, z
axis equal
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật
Matlab® – Matrix Laboratory 15
Code Matlab:
zz = linspace(0, 2*pi, 26);
r = 1+sin(zz);
[x, y, z] = cylinder(r, 16);
surf(x, y, z)
view(-88.5, -48)
shading flat
colormap(copper)
axis off vis3d %co dinh camera
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật
Matlab® – Matrix Laboratory 16
7.6.3. Lệnh ellipsoid
Lệnh ellipsoid tính tọa độ các điểm tạo nên hình bầu dục, với pháp
[x, y, z] = ellipsoid(xc, yc, zc, xr, yr, zr, n): vẽ hình bầu dục với xc, yc, zc là
vị trí tâm, xr, yr, zr là chiều dài các trục, n là số độ mịn.
Code Matlab:
[x, y, z] = ellipsoid(0, 1, 1, 2, 6, 6, 30);
axis equal
surf(x, y, z)
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 17
7.7. Vẽ mặt cong có dạng xoắn ốc
Code Matlab:
a = 1.13; b = 1.14;
uu = linspace(0, 2*pi, 30);
vv = linspace(-15, 6, 45);
[u, v] = meshgrid(uu, vv);
x = a.^v.*cos(v).*(1+cos(u));
y = -a.^v.*sin(v).*(1+cos(u));
z = -b*a.^v.*(1+sin(u));
h=surf(x, y, z);
%set(h, 'FaceAlpha', 0.4)
%shading interp
axis vis3d on equal
view([-35 38])
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 18
7.8. Vẽ đường giao của hai mặt
Code Matlab:
a = 1;
[xs, ys, zs] = sphere(30);
surf(2*a*xs, 2*a*ys, 2*a*zs)
hold on
[x, y, z] = cylinder;
surf(a*x+a, a*y, 4*a*z-2*a)
shading interp
t = linspace(0, 4*pi, 100);
x = a*(1+cos(t));
y = a*sin(t);
z = 2*a*sin(t/2);
plot3(x, y, z, 'y-', 'Linewidth', 2.5);
axis equal off
view([45, 30])
9/3/2019
4
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 19
7.9. Các quy ước về màu sắc
Red Green Blue Color
1 0 0 red
0 1 0 green
0 0 1 blue
1 1 0 yellow
1 0 1 magenta
0 1 1 cyan
0 0 0 black
1 1 1 white
Màu được định nghĩa từ 3 màu chính RGB có 3 cột, 1 hàng giá trị từ 0->1
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 20
Red Green Blue Color
0 0.5 0 dark green
0.67 0 1 violet
1 0.5 0 orange
0.5 0 0 dark red
0.5 0.5 0.5 medium
gray
Một số màu kết hợp
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật
Matlab® – Matrix Laboratory 21
Standard Colormap Description
hsv Phmàu 7 sắc bắt đầu và kết
thúc là màu đỏ
jet bắt đầu là màu đỏ và kết thúc
là màu xanh dương
hot, cool Màu nóng và màu lạnh
summer,autumn,winter,spring Màu của bốn mùa
white,gray,bone,pink Biến thiên từ màu đó đến
màu trắng
copper Màu đồng
Một số dạng phổ màu trong MATLAB
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật
Matlab® – Matrix Laboratory 22
Hiển thị và sử dụng phổ màu cho các loại đồ thị 2 chiều và 3 chiều:
plot, plot3, mesh, surf, contour…
Chọn 8 đoạn màu cho phổ màu hot
hot(8)
Code Matlab:
[x,y,z]=peaks;
mesh(x,y,z);
colormap(hot(8))
axis([-3 3 -3 3 -6 8])
colorbar % hiển thị phổ màu
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 23
Để sử dụng nhiều hơn một phổ ta dùng các lệnh sau:
Code Matlab:
mymap=[hsv(32);copper(32)];
colormap(mymap)
mesh(peaks+8);
view(90,0)
hold on
mesh(peaks-8);
colorbar
hold off
Xoay 90 độ theo trục z ngược chiều kim đồng hồ
Thay đổi góc nhìn view(az,el)
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 24
Code Matlab:
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
surf(X,Y,Z,Z)
Tương tự như lệnh surf(X,Y,Z) màu mặc định thay đổi theo
phương Z
surf(X,Y,Z,-Z) %thay đổi ngược chiều trục Z
surf(X,Y,Z,X) %thay đổi theo trục X
surf(X,Y,Z,X+Y) %thay đổi theo mặt X-Y
surf(X,Y,Z,R) %thay đổi theo bán kính
9/3/2019
5
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 25
7.10. Hiệu ứng chiếu sáng
Ta sử dụng lệnh lightlighting
Code Matlab:
sphere
colormap(gray)
shading interp
light %bật đèn chiếu
lighting none %đèn chiếu mặc định
lighting gouraud %đèn chiếu gouraud
lighting phong %đèn chiếu phong