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