Tải bản đầy đủ (.pdf) (13 trang)

Đồ họa trong không gian ba chiều

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (189.39 KB, 13 trang )

Updatesofts.com Ebook Team
137


chơng 18
Đồ hoạ
trong không gian 3 chiều



MATLAB cung cấp một số hàm để hiển thị dữ liệu 3 chiều nh các hàm vẽ đờng
thẳng trong không gian 3 chiều, các hàm vẽ bề mặt và và khung dây và màu có thể đợc sử
dụng thay thế cho chiều thứ t.

18.1 Đồ thị đ
18.1 Đồ thị đ18.1 Đồ thị đ
18.1 Đồ thị đờng thẳng.
ờng thẳng.ờng thẳng.
ờng thẳng.



Lệnh
plot
plotplot
plot
từ trong không gian hai chiều có thể mở rộng cho không gian 3 chiều bằng
lệnh
plot3
plot3plot3
plot3


. Khuôn dạng của
plot3
plot3plot3
plot3
nh sau:

plot3 ( x1, y1, z1, S1, x2, y2, z2, S2, .... )
plot3 ( x1, y1, z1, S1, x2, y2, z2, S2, .... )plot3 ( x1, y1, z1, S1, x2, y2, z2, S2, .... )
plot3 ( x1, y1, z1, S1, x2, y2, z2, S2, .... )
, trong đó xn, yn và zn là các vector hoặc
ma trận, và Sn là xâu kí tự tuỳ chọn dùng cho việc khai báo màu, tạo biểu tợng hoặc kiểu
đờng. Sau đây là một số ví dụ:

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

Hình 18.1
Chú ý rằng: hàm
zlabel
zlabelzlabel
zlabel
tơng ứng với hàm hai chiều
xlabel
xlabelxlabel
xlabel

ylabel
ylabelylabel

ylabel
. Tơng tự nh vậy,
lệnh
axis
axisaxis
axis
cũng có khuôn dạng:
axis ( [xmin xmax ymin ymax zmin zmax ] )
axis ( [xmin xmax ymin ymax zmin zmax ] )axis ( [xmin xmax ymin ymax zmin zmax ] )
axis ( [xmin xmax ymin ymax zmin zmax ] )
thiết lập giới
hạn cho cả 3 trục. Ví dụ :
>> axis('ij') % thay đổi hớng trục từ sau ra trớc
Updatesofts.com Ebook Team
138

Hình 18.2

Hàm
text
text text
text
cũng có khuôn mẫu nh sau:
: :
:
text ( x, y, z, string )
text ( x, y, z, string )text ( x, y, z, string )
text ( x, y, z, string )
sẽ đặt vị trí xâu string
vào toạ độ x, y, z.


18.2 Đồ thị bề mặt và l
18.2 Đồ thị bề mặt và l18.2 Đồ thị bề mặt và l
18.2 Đồ thị bề mặt và lới
ớiới
ới







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 vuông trên mặt phẳng x-y. Nó tạo lên mẫu một đồ thị bằng cách ghép các điểm gần kề
với các đờng thẳng. Kết quả là nó trông nh một mạng lới đánh cá với các mắt lới là các
điểm dữ liệu. Đồ thị lới này thờng đợc sử dụng để quan sát những ma trận lớn hoặc vẽ
những hàm có hai biến.
Bớc đầu tiên là đa ra đồ thị lới của hàm hai biến z = f (x, y ), tơng ứng với ma trận
X và Y chứa các hàng và các cột lặp đi lặp lại. MATLAB cung cấp hàm
meshgrid
meshgridmeshgrid
meshgrid
cho mục
đích này. [ X, Y ] = meshgrid
meshgridmeshgrid
meshgrid(x, y ), tạo một ma trận X, mà các hàng của nó là bản sao của
vector x, và ma trận Y có các cột của nó là bản sao của vector y. Cặp ma trận này sau đó
đợc sử dụng để ớc lợng hàm hai biến sử dùng đặc tính toán học về mảng của
MATLAB.

Sau đây là một ví dụ về cách dùng hàm
meshgrid.
meshgrid.meshgrid.
meshgrid.






>> x = -7.5:.5:7.5;
>> y = x;
>> [X,Y] = meshgrid(x,y);

X, Y là một cặp của ma trận tơng ứng một lới chữ nhật trong mặt phẳng x-y. Mọi hàm
z=f(x,y) có thể sử dụng tính chất này.

>> R = sqrt(X.^2+Y.^2)+eps;
>> % find the distance from the origin (0,0)
>> Z = sin(R)./R; % calculate sin(r)/ r

Updatesofts.com Ebook Team
139
Ma trận R chứa bán kính của mỗi điểm trong [X,Y], nó là khoảng cách từ mỗi điểm
đến tâm ma trận. Cộng thêm
eps
epseps
eps



để không để xảy ra phép chia cho 0. Ma trận Z chứa sine


của bán kính chia cho bán kính mỗi điểm trong sơ đồ. Câu lệnh sau vẽ đồ thị lới:

>> mesh(X,Y,Z)


Hình 18.3
Hình 18.3Hình 18.3
Hình 18.3



Đồ thị trên là đơn sắc. Tuy nhiên bạn có thể thay đổi màu sắc với sự trợ giúp của
MATLAB rất rễ dàng nếu bạn đọc đến phần colormaps..
colormaps..colormaps..
colormaps..


Trong ví dụ này, hàm
mesh
meshmesh
mesh
xắp xếp giá trị của các phần tử của ma trận vào các
điểm (X

,Y

,Z


) trong không gian ba chiều.
mesh
meshmesh
mesh
cũng có thể vẽ một ma trận đơn tơng tự nh-
với một đối số;
mesh(Z)
mesh(Z)mesh(Z)
mesh(Z)
, sử dụng các điểm (i,j,Z

). Nh vậy Z đợc vẽ ngợc lại với các chỉ
số của nó, trong trờng hợp này
mesh(Z)
mesh(Z)mesh(Z)
mesh(Z)
chỉ đơn giản là chia lại độ khắc các trục x, y theo
các chỉ số của ma trận Z. Bạn hãy thử tạo ví dụ cho trờng hợp này?.
Đồ thị bề mặt của cùng một ma trận Z trông nh đồ thị lới trớc đó, ngoại trừ khoảng
cách giữa hai đờng là khác nhau (gọi là patchs)
patchs)patchs)
patchs). Đồ thị loại này dùng hàm
surf,
surf,surf,
surf,
nó có tất cả
các đối số nh hàm



mesh
meshmesh
mesh
.
..
. Hãy xem ví dụ dới đây (Hình 18.4):

>> surf(X,Y,Z)
Updatesofts.com Ebook Team
140

Hình 18.4
Hình 18.4Hình 18.4
Hình 18.4



Để làm rõ thêm một vài chủ đề, chúng ta cùng quay lại hàm
peaks
peakspeaks
peaks
đã đa ra ở phần tr-
ớc. Đồ thị lới trong không gian 3 chiều của hàm này đợc đa ra nh sau (hình 18.5):

>> mesh(peaks)
>> title('Mesh Plot of Peaks function')



Hình 18.5

Hình 18.5Hình 18.5
Hình 18.5



Đồ thị đờng viền cho ta thấy đợc độ nâng hoặc độ cao của hình. Trong MATLAB đồ thị
đờng viền trong không gian hai chiều tơng tự nh trong không gian ba chiều nhng hàm
gọi của nó là contour3
contour3contour3
contour3. Đồ thị sử dụng các lệnh sẽ đợc minh hoạ trong bảng khắc màu.

Updatesofts.com Ebook Team
141
18.3 Thao t
18.3 Thao t18.3 Thao t
18.3 Thao tác với đồ thị
ác với đồ thịác với đồ thị
ác với đồ thị





MATLAB cho phép bạn khai báo góc để từ đó quan sát đợc đồ thị trong không gian
ba chiều. Hàm
view(azimuth, elevation )
view(azimuth, elevation ) view(azimuth, elevation )
view(azimuth, elevation )
thiết lập góc xem bằng việc khai báo
azimuth

azimuthazimuth
azimuth

elevation
elevationelevation
elevation
. Elevation
ElevationElevation
Elevation mô tả vị trí ngời quan sát, xem nh là góc đo bằng độ trên hệ trục
x-y. Azimut
Azimut Azimut
Azimut mô tả góc trong hệ trục nơi ngời quan sát đứng.
Azimuth
Azimuth Azimuth
Azimuth


đợc đo bằng độ từ phần âm trục y. Phía âm trục y có thể quay theo chiều kim
đồng hồ một góc -37.5 độ từ phía bạn.
Elevation
ElevationElevation
Elevation


là góc mà tại đó mắt bạn thấy đợc mặt
phẳng x-y. Sử dụng hàm
view
viewview
view
cho phép bạn có thể quan sát hình vẽ từ các góc độ khác

nhau. Ví dụ nếu
elevation
elevationelevation
elevation
thiết lập là âm, thì
view
viewview
view
sẽ nhìn hình từ phía dới lên. Nếu
azimuth
azimuthazimuth
azimuth

thiết lập dơng, thì hình sẽ quay ngợc chiều kim đồng hồ từ điểm nhìn mặc định.Thậm chí
bạn có thể nhìn trực tiếp từ trên bằng cách thiết lập
view(0,90 )
view(0,90 )view(0,90 )
view(0,90 )
. Thực ra thì đây là điểm nhìn
mặc định 2 chiều, trong đó x tăng từ trái qua phải, và y tăng từ trên xuống dới, khuôn dạng
view(2)
view(2)view(2)
view(2)
hoàn toàn giống nh mặc
định của
view(0, 90 )
view(0, 90 )view(0, 90 )
view(0, 90 )
, và
view(3)

view(3)view(3)
view(3)
thiết lập mặc định trong không gian 3 chiều.
Lệnh
view
viewview
view
có một dạng khác mà rất tiện ích khi sử dụng là
view([X,Y,Z ])
view([X,Y,Z ])view([X,Y,Z ])
view([X,Y,Z ])
cho phép bạn
quan sát trên một vector chứa hệ trục toạ độ decac trong không gian 3 chiều. Khoảng cách
từ vị trí bạn quan sát đến gốc toạ độ không bị ảnh hởng. Ví dụ,
view([0 10 0 ])
view([0 10 0 ])view([0 10 0 ])
view([0 10 0 ])
,
view([0
view([0 view([0
view([0 -
--
-1
1 1
1
0 ])
0 ])0 ])
0 ])

view(0, 0 )

view(0, 0 )view(0, 0 )
view(0, 0 )
cho các kết quả nh nhau. Các thông số
azimuth
azimuthazimuth
azimuth

elevation
elevationelevation
elevation
mà bạn
đang quan sát có thể lấy lại đợc bằng cách dùng
[az, e] =
[az, e] = [az, e] =
[az, e] = view
viewview
view
. Vídụ:

>> view([-7 -9 7])
>> [az,el] = view
az =
-37.8750
el =
31.5475

Một công cụ hữu dụng khác là quan sát đồ thị không gian 3 chiều bởi hàm
rotate3d.
rotate3d. rotate3d.
rotate3d.

Các
thông số
Azimtuh
AzimtuhAzimtuh
Azimtuh





elevation
elevationelevation
elevation
có thể đợc tác động bởi chuột,
rotate3d
rotate3drotate3d
rotate3d on
on on
on
cho phép chuột
can thiệp,


rotate3d off
rotate3d offrotate3d off
rotate3d off
không cho phép.
Lệnh



hidden
hiddenhidden
hidden
dấu các nét khuất. Khi bạn vẽ đồ thị, thì một số phần của nó bị che khuất
bởi các phần khác, khi đó nếu dùng lệnh này thì các nét khuất sẽ bị dấu đi, bạn chỉ có thể
nhìn phần nào ở trong tầm nhìn của bạn. Nếu bạn chuyển đến
hidden off
hidden offhidden off
hidden off
, bạn có thể thấy
phần khuất đó qua mạng lới. Dới đây là ví dụ:

>> mesh(peaks(20)+7)
>> hold on
>> pcolor(peaks(20))
>> hold off
>> title('Mesh with hiden on')

×