Polecenia

Transkrypt

Polecenia
Wpomaganie komputerowe w technice.
TWORZENIE GRAFIKI 3D W
PROGRAMIE MATLAB
Jakub BoŜyk ETI 9.1
Polecenia
Program Matlab umoŜliwia wizualizację
trójwymiarową.
Pakiet słuŜący do tego udostępnia funkcje słuŜące
do rysowania krzywych przestrzennych (plot),
siatek (mesh), powierzchni (surf ) oraz wykresów
konturowych (contour).
1
Plot 3
plot3(x,y,z,s)
(x,y,z,s) - generuje trójwymiarowa krzywą złoŜoną z
punktów (xi,yi
(xi,yi,,zi),
zi), których
Współrzędne zostały określone w wektorach x, y, z.
Wektory muszą być tej samej długości.Funkcja ta jest
odpowiednikiem funkcji plot w grafice dwuwymiarowej
Powierzchnia rysowana jest w Matlabie jako wykres
funkcji z=f(x,y), przy czym współrzędne punktów (xi,yi
(xi,yi))
określone są za pomocą wektorów X i Y, gdzie indeksy i j
przyjmuja wartosci i=1:length
(X), j=1:length
(Y)
i=1:length(X),
j=1:length(Y)
Mesh
mesh(x,y,z,c)
mesh(x,y,z,c) –rysuje powierzchnię opisaną macierzami
x,y,z w postaci kolorowej siatki o polach wypełnionych
kolorem tła; elementy macierzy c określają kolory linii
poszczególnych pól.
mesh(x,y,z)
mesh(x,y,z)--rysuje powierzchnię, przyjmując c=z.
mesh(z,c)
mesh(z,c)--rysuje wykres wartości elementów macierzy z,
przyjmując x=1:n, y=1:m, gdzie [m,n]=size
(z).
[m,n]=size(z).
meshc(x,y,z,c)
meshc(x,y,z,c)--rysuje siatkę identyczną jak funkcja mesh
i umieszcza pod nią wykres poziomicowy.
meshz(x,y,z,c)
meshz(x,y,z,c)--działa jak mesh,
mesh, ale dodatkowo w dół od
krawędzi wykresu rysowane są linie określające
płaszczyzny odniesienia.
2
Meshgrid
Tworzenie wykresów trójwymiarowy na dwuwymiarowej
płaszczyznie ekranu, jest moŜliwe po wygenerowaniu
specjalnej siatki na płaszczyznie XY w tych węzłach, w
których szukane sa wartości funkcji w osi z. Słuzy do tego
funkcja meshgrid,
meshgrid, np.
np.
x = linspace(
linspace(-1,1,20); y = x;
[X Y] = meshgrid(x,y);
meshgrid(x,y);
R =cos(X./4 + Y./4);
Z = 4.*R;
mesh(X,Y,Z);
mesh(X,Y,Z);
Meshgrid
3
Meshgrid
t = linspace(0,2*pi);
r = linspace(0,2,50);
[T,R] = meshgrid(t,r);
X = R.*cos(T);
Y = R.*sin(T);
Z = cos(-X.^2 - Y.^2);
mesh(X,Y,Z);
t = linspace(0,2*pi);
linspace(0,2*pi);
r = linspace(0,2,50);
linspace(0,2,50);
[T,R] = meshgrid(t,r);
meshgrid(t,r);
X = R.*cos
(T);
R.*cos(T);
Y = R.*sin
(T);
R.*sin(T);
Z = cos(
cos(-X.^2 - Y.^2);
mesh(X,Y,Z);
mesh(X,Y,Z);
Przykłady
Przy wykorzystaniu macierzy X,Y,Z wykorzystujących zbiór
punktów w przestrzeni, moŜemy wizualizować zbiór róŜnymi
funkcjami grafiki 3D Matlaba:
Matlaba:
t = linspace(0,2*pi,5);
r = linspace(0,2,15);
[T,R] = meshgrid(t,r);X = R.*cos(T);Y = R.*sin(T);
Z = 1+ X.^2 + Y.^2;
subplot(2,2,1);surf(X,Y,Z);title('a');
subplot(2,2,2);contour(X,Y,Z);title('b');
subplot(2,2,3);surfc(X,Y,Z);title('c');
subplot(2,2,4);surfl(X,Y,Z);title('d');
4
Przykłady
Meshgrid
Poza standardowymi funkcjami rysującymi
powierzchnię Matlab dysponuje funkcjami graficznymi
typu easy:
easy:
ezmesh,
ezmesh,
ezsurf,
ezsurf,
ezcontour itp.
Funkcje te pozwalają na rysowanie powierzchni
postaci z = f(x,y) lub powierzchni danych równaniami
parametrycznymi.
5
f(x,y)=x2+y2
x=x=-.5:.005:.5; y=x;
[X,Y]=meshgrid
[X,Y]=meshgrid(x,y);
meshgrid(x,y);
Z=sin(1./(X.^2+Y.^2+eps
Z=sin(1./(X.^2+Y.^2+eps));
eps));
pcolor(X,Y,Z);
pcolor(X,Y,Z);
shading interp
axis(
axis('equal',
'equal','square',
'square','off')
'off')
f(x,y)=sin(x2+y2)
x=x=-100:1:.100; y=x;
[X,Y]=meshgrid
meshgrid(x,y);
[X,Y]=
meshgrid(x,y);
Z=sin(X.^2+Y.^2); pcolor(X,Y,Z);
pcolor(X,Y,Z);
shading interp
axis(
axis('equal',
'equal','square',
'square','off')
'off')
[x, y, z]=sphere
(20);
z]=sphere(20);
figure(1);
figure(1);
h(1)=mesh
(x,y,z);
h(1)=mesh(x,y,z);
colormap([0
colormap([0 0 0]);
axis equal;
equal;
hidden off;
off;
figure(2);
figure(2);
h(2)=mesh
(x,y,z);
h(2)=mesh(x,y,z);
colormap([0
colormap([0 0 0]);
axis equal;
equal;
hidden on;
set(h,'linewidth', 2);
shading flat - jednolity kolor wewną
wewnątrz kaŜ
kaŜdego fragmentu z
obramowaniem w takim samym kolorze.
shading interp - łagodne przejś
przejście pomię
pomiędzy kolorami.
shading faceted - jednolity kolor wewną
wewnątrz kaŜ
kaŜdego fragmentu oraz
czarne obramowanie dookoł
dookoła (ustawienie domyś
domyślne).
6
%X:200x300; map:81x3
load clown
[x,y,z]=sphere
(50);
[x,y,z]=sphere(50);
surface(x+1.5,y
-2,z+3, ...
surface(x+1.5,y'Cdata',
'Cdata',flipud(X),...
flipud(X),...
'FaceColor',
'FaceColor','texturemap',...
'texturemap',...
'EdgeColor',
'EdgeColor','none',...
'none',...
'CDataMapping',
'CDataMapping','direct')
'direct')
hold on;
N=64; z=z=-N/2:N;
r=exp
(-abs(3/N*z))
r=exp(
abs(3/N*z)) ...
.*cos(z*pi*3/N);
r=rr=r-min(r)+0.3;
[x, y, z]=cylinder(r);
surface(x,y,4*z,
surface(x,y,4*z, ...
'Cdata',
'Cdata',flipud(X),...
flipud(X),...
'FaceColor',
'FaceColor','texturemap',...
'texturemap',...
'EdgeColor',
'EdgeColor','none',...
'none',...
'CDataMapping',
'CDataMapping','direct')
'direct')
hold off;
off;
colormap(map)
colormap(map)
view(
view(-39,37)
7

Podobne dokumenty