background image

 

1

Grafika w programie 

MATLAB

dr inż. Henryk Olszewski

background image

 

2

Funkcja quiver

Funkcja quiver wyświetla wektory prędkości w postaci strzałek, których długości i zwroty określają macierze składowych wektorów U i V zaś współrzędne punktów zaczepienia 
macierze X i Y:

quiver(X,Y,U,V)

Macierze XYU i V muszą mieć ten sam wymiar i zawierać odpowiadające sobie współrzędne położenia wektorów i składowe wektorów.

Program MATLAB generuje macierze współrzędnych X i Y na podstawie wektorów:    

[X,Y] = meshgrid(X,Y)
quiver(X,Y,U,V)

W tym przypadku muszą być spełnione następujące zależności:

length(X) = n i length(Y) = m, gdzie [m,n] = size(U) = size(V) 

Wektor X odpowiada kolumnom macierzy U i V, zaś wektor Y wierszom macierzy U i V

background image

 

3

Funkcja quiver

Funkcja:

quiver(U,V) 

wyświetla wektory U i V w równoodległych punktach na płaszczyźnie x-y.

Funkcja: 

quiver(...,scale) 

automatycznie  przeskalowywuje  strzałki  wektorów  dopasowywując  je  węzłów  siatki,  a  następnie przemnaża  długość wektorów  przez  zadany  współczynnik  skali.  Jeżeli  parametr  scale  =  2 
długość  wektorów  zwiększa  się  dwukrotnie,  jeżeli  parametr  scale  =  0.5  długość  wektorów  zmniejsza  się  dwukrotnie.  Jeżeli  parametr  scale  =  0  wektory  prędkości  nie  są  automatycznie 
przeskalowywane. 

We funkcji:

quiver(...,LineSpec) 

rodzaj linii, symbol markera oraz kolor linii są określone przez parametr LineSpec. Markery są rysowane w punktach początkowych wektorów. 

background image

 

4

Funkcja quiver

Funkcja: 

quiver(...,LineSpec,'filled') 

wypełnia markery określone za pomocą parametru LineSpec.

Polecenie:

h = quiver(...) 

wyświetla wektor cech rysowanych linii. 

Przykład 1:

Wyświetlić pole gradientów funkcji:

 

2

2

y

x

e

x

z

background image

 

5

Funkcja quiver

[X,Y] = meshgrid(-2:.2:2);

Z = X.*exp(-X.^2 - Y.^2);

[DX,DY] = gradient(Z,.2,.2);

contour(X,Y,Z)

hold on

quiver(X,Y,DX,DY)

colormap hsv

grid off

hold off

-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

background image

 

6

Funkcja quiver

Przykład 2:

Wyświetlić 10 linii konturowych funkcji peaks

n = -2.0:.2:2.0;

[X,Y,Z] = peaks(n);

contour(X,Y,Z,10)

 

background image

 

7

Funkcja quiver

Przykład 2:

Przy pomocy funkcji gradient obliczyć składowe wektora przyrostów funkcji Z będące parametrami funkcji quiver

[U,V] = gradient(Z,.2);

Na wyświetlony w oknie rysunkowym wykres nałożyć nowy wykres pola wektorowego:

hold on

quiver(X,Y,U,V)

hold off 

 

background image

 

8

Funkcja quiver3

Funkcja quiver3 wyświetla trójwymiarowe wykresy wektorów o  składowych (UVW) w 
punktach o współrzędnych (XYZ):

quiver(X,Y,Z,U,V,W)

Przykład 1:
Wyświetlić wektory normalnych do płaszczyzny określonej równaniem:

2

2

y

x

e

x

z

background image

 

9

Funkcja quiver3

[X,Y] = meshgrid(-2:0.25:2,-1:0.2:1);

Z = X.* exp(-X.^2 - Y.^2);

[U,V,W] = surfnorm(X,Y,Z);

quiver3(X,Y,Z,U,V,W,0.5);

hold on

surf(X,Y,Z);

colormap hsv

view(-35,45)

axis ([-2 2 -1 1 -.6 .6])

hold off

-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

-1

-0.5

0

0.5

1

-0.4

-0.2

0

0.2

0.4

0.6

background image

 

10

Funkcja quiver3

Przykład 2:
Wyświetlić prędkość punktu, którego trajektoria jest opisana równaniem:

Określenie wartości stałych vz oraz a:

vz = 10;            

% Velocity

a = -32;            

% Acceleration

Obliczenia funkcji z, jeżeli czas zmienia się od 0 do 1 z krokiem 0.1:

t = 0:.1:1;
z = vz*t + 1/2*a*t.^2;

Obliczenia składowych położenia x i y

vx = 2;
x = vx*t;
vy = 3;
y = vy*t;

 

2

2

t

a

t

v

t

z

z

background image

 

11

Funkcja quiver3

Przykład 2:
Obliczenia składowych wektorów prędkości i wyświetlenie wektorów w przestrzeni trójwymiarowej:

u = gradient(x);
v = gradient(y);
w = gradient(z);
scale = 0;
quiver3(x,y,z,u,v,w,scale)
view([70 18])

background image

 

12

Funkcja coneplot

Funkcja coneplot wyświetla wektory prędkości postaci w stożków w przestrzeni 3D. 

Funkcja:

coneplot(X,Y,Z,U,V,W,Cx,Cy,Cz) 

wyświetla wektory prędkości w postaci stożków, których osie symetrii są zgodne z kierunkami wektorów prędkości zaś wysokość jest 
proporcjonalna do długości wektora. 

Macierze XY i Z zawierają składowe współrzędnych pola wektorów.
Macierze UV i W zawierają składowe wektorów. Powyższe macierze muszą mieć te same wymiary, muszą być monotoniczne i 
3-D (o takiej samej postaci, co macierze wygenerowane przez funkcję meshgrid).
Macierze CxCy i Cz zawierają położenia stożków w polu prędkości.  

background image

 

13

Funkcja coneplot

W przypadku funkcji:

coneplot(U,V,W,Cx,Cy,Cz) 

(macierze XY i Z są pominięte) przyjmuje się, że: 

[X,Y,Z] = meshgrid(1:n,1:m,1:p) gdzie: [m,n,p]= size(U).

W przypadku wywołania funkcji:

coneplot(...,s) 

funkcja MATLAB automatycznie przeskalowywuje stożki wykresu do rozmiarów okna graficznego  a następnie zmienia ich wysokości przemnażając je współczynnik skali 
s.  Jeśli  współczynnik  skali  s  nie  jest  określony  program  MATLAB  przyjmuje  wartość  domyślną  s  =  1.  Jeżeli          s  =  0    stożki  są  wyświetlane  bez  automatycznego 
przeskalowania. 

background image

 

14

Funkcja coneplot

Funkcja:

coneplot(...,color) 

interpoluje macierzą kolorów pole wektorów i następnie wyświetla stożki w kolorach odpowiadających interpolowanym wartościom. Wymiary macierzy 
color muszą być te same, co wymiary macierzy UV i W. Powyższa opcja działa tylko w przypadku stożków (nie współpracuje z opcją quiver). 

Funkcja:

coneplot(...,'quiver') 

wyświetla strzałki zamiast stożków (działa podobnie jak funkcja quiver3).

background image

 

15

Funkcja coneplot

W przypadku funkcji:

coneplot(...,'method') 

istnieje możliwość wyboru metody interpolacji:

‘linear’

- kawałkami liniowa – funkcją łamaną (domyślna),

‘cubic’ 

- kawałkami sześcienna – wielomianami trzeciego 

  stopnia,

‘nearest’

- najmniejszych odległości

Funkcja:

coneplot(X,Y,Z,U,V,W,'nointerp') 

nie interpoluje położenia stożków w zadanej objętości. Stożki są rysowane w położeniach zdefiniowanych przez macierze  XY i Z, zaś ich orientację określają macierze UV i W. Macierze XYZU
VW muszą mieć te same wymiary. 

background image

 

16

Funkcja coneplot

Polecenie:

h = coneplot(...) 

wyświetla cechy obiektów użytych do narysowania stożków 

Funkcja  coneplot  automatycznie  przeskalowywuje  wymiary  stożków,  tak  by  maksymalnie  wypełniały  one  obszar 
wykresu  przy  równoczesnym  zachowaniu  proporcji  względem  wektorów  prędkości.W  większości  przypadków  należy 
określić współczynniki skali osi wykresu przed użyciem funkcji coneplot za pomocą funkcji daspect:

daspect([1,1,1])

background image

 

17

Funkcja coneplot

Przykład 1:
Narysować  stożkowe  wektory  prędkości  przedstawiające  ruch  powietrza  w  prostopadłościennej 
przestrzeni. Wykres ma obejmować:

stożki określające amplitudę oraz kierunek prędkości wiatru,

powłokę brzeg wykresu,

kierunkowe oświetlenie ułatwiające określenie orientacji stożków.

background image

 

18

Funkcja coneplot

Wczytanie danych
Plik danych dotyczących wiatru wind zawiera sześć 3-D macierzy: uv i w określających składowe prędkości w każdym punkcie przestrzeni o współrzędnych xy i z. Po 
wczytaniu danych pomocne jest ustalenie zakresów wczytanych danych, które zostaną wykorzystane przy rysowaniu powłoki oraz stożków prędkości:

load wind
xmin = min(x(:));
xmax = max(x(:));
ymin = min(y(:));
ymax = max(y(:));
zmin = min(z(:));
zmax = max(z(:));

background image

 

19

Funkcja coneplot

Utworzenie wykresu stożkowego

Określić zakresu wykresu stożkowego – przyjąć pełen zakres x i y z ośmioma krokami w przedziale od 3 do 15 oraz z czterema krokami z zakresie z (funkcje linspace i meshgrid). 
Użyć funkcję daspect w celu określenia współczynników skali osi przed wydaniem polecenia coneplot – program MATLAB przyjmie właściwe wymiary stożków. 
Wygenerować stożki przyjmując współczynnik skali równy 5 – stożki będą pięciokrotnie większe. 
Określić sposób kolorowania każdego stożka (funkcje FaceColorEdgeColor). 

daspect([2,2,1])
xrange = linspace(xmin,xmax,8);
yrange = linspace(ymin,ymax,8);
zrange = 3:4:15;
[cx cy cz] = meshgrid(xrange,yrange,zrange);
hcones = coneplot(x,y,z,u,v,w,cx,cy,cz,5);
set(hcones,'FaceColor','red','EdgeColor','none')

background image

 

20

Funkcja coneplot

Utworzenie powłoki tworzącej brzeg rysunku

Obliczyć długości wektorów pola prędkości (które reprezentują prędkości wiatru) będące danymi funkcji slice.
Wygenerować powłokę brzegową, dla której współrzędna x zmienia się od xmin do xmaxy zmienia się od ymin do ymaxz zmienia się od zmin do zmax
Określić zinterpolowane kolory siatki elementów trójkątnych powłoki ograniczającej przestrzenny wykres prędkości wiatru. Kolory siatki zależeć mają od prędkości 
wiatru. Krawędzie elementów nie mają być rysowane (funkcje holdsliceFaceColorEdgeColor).   

hold on
wind_speed = sqrt(u.^2 + v.^2 + w.^2);
hsurfaces=slice(x,y,z,wind_speed,[xmin,xmax],ymax,zmin);
set(hsurfaces,'FaceColor','interp','EdgeColor','none')
hold off

background image

 

21

Funkcja coneplot

Zdefiniować widok

Za pomocą funkcji axis określić granice osi wykresu równe zakresom danych.
Przyjąć widok o azymucie równym 30 i elewacji równej 40 (ustalenie najlepszego widoku jest możliwe przy pomocy funkcji rotate3d).
Przyjąć widok perspektywiczny pozwalający uzyskać bardziej realistyczny widok wykresu (funkcja camproj).
Powiększyć scenę wykresu tak, by wykres był możliwie jak największy (funkcja camzoom).

axis tight; 
view(30,40); axis off
camproj perspective; 
camzoom(1.5)

background image

 

22

Funkcja coneplot

Dodać oświetlenie do sceny
Dodane  do  sceny  źródła  światła  oświetlają  zarówno  powłokę  (brzeg  wykresu),  jak  i  stożki  (linie  prądu  wiatru).  Dla  każdego  z  powyższych  obiektów  wykresu  można 
określić różne charakterystyki odbicie i pochłaniania światła.

Dodać  źródło  światła  na  prawo  od  kamery,  użyć  oświetlenie  Phong,  w  którym  stożki  i  powłoki  brzegu  łagodnie  wyłaniają  się  z  trójwymiarowego  wykresu 
(funkcje camlightlighting).
Zwiększyć wartość cechy AmbientStrength ( światło otoczenia) dla każdej powłoki w celu zwiększenia nasycenia ciemno-niebieskiego koloru (istnieje również 
możliwość określenia różnych map kolorów – funkcja colormap dla poszczególnych powłok brzegu strumienia wiatru). 
Zwiększyć wartość cechy DiffuseStrength (rozproszenie światła) dla stożków w celu rozjaśnienia stożków nie odbijających bezpośrednio strumień światła. 

camlight right; lighting phong
set(hsurfaces,'AmbientStrength',.6)
set(hcones,'DiffuseStrength',.8)

background image

 

23

Funkcja coneplot

background image

 

24

Funkcja curl

Funkcja curl wyświetla rotacje wektorów oraz prędkości kątowe pola wektorów w przestrzeni trójwymiarowej.

Przykład 1:
Przy pomocy kolorowych powłok (slice planes) wykonać wykres prędkości kątowych zawirowania powietrza w określonych położeniach pola wektorów strumienia wiatru:
 

load wind
cav = curl(x,y,z,u,v,w);
slice(x,y,z,cav,[90 134],[59],[0]); 
shading interp
daspect([1 1 1]); axis tight
colormap hot(16)
camlight

background image

 

25

Funkcja curl

background image

 

26

Funkcja curl

Przykład 2:
Wykonać wykres prędkości kątowych zawirowania powietrza na zadanej płaszczyźnie analizowanej objętości strumienia powietrza, na otrzymany wykres nanieść wektory prędkości (funkcja  quiver
w tej samej płaszczyźnie:

load wind
k = 4;
x=x(:,:,k); y=y(:,:,k); u=u(:,:,k); v=v(:,:,k); 
cav = curl(x,y,u,v);
pcolor(x,y,cav); shading interp
hold on;
quiver(x,y,u,v,'y')
hold off
colormap copper

background image

 

27

Funkcja curl

background image

 

28

Funkcja streamribbon 

Funkcja streamribbon wyświetla wstęgi linii prądu w przestrzeni 3D.

Funkcja: 

streamribbon(X,Y,Z,U,V,W,startx,starty,startz) 

wyświetla wstęgi prądu na podstawie zadanych macierzy danych UV i W (macierze 3D). Macierze XY i Z  zawierają współrzędne dla danych UV i 
W. Powyższe macierze muszą być monotoniczne i 3-D (macierze o postaci generowanej przez funkcję  meshgrid). Parametry startxstarty i startz 
określają położenia początkowe środków wstęg linii prądu. 

Skręcenie  wstęg  linii  prądu  jest  proporcjonalne  do  rotacji  pola  wektorowego.  Grubość  wstęg  jest  obliczana  automatycznie.  Zalecane  jest  określenie 
współczynnika skali wyświetlanych danych DataAspectRatio (funkcja daspect) przed użyciem funkcji streamribbon.

background image

 

29

Funkcja streamribbon 

W przypadku pominięcia macierzy współrzędnych XY i Z we funkcji:

streamribbon(U,V,W,startx,starty,startz) 

macierze XY i Z są przyjmowane zgodnie z poleceniem: 

[X,Y,Z] = meshgrid(1:n,1:m,1:p) gdzie [m,n,p] = size(U).

Funkcja:

streamribbon(vertices,X,Y,Z,cav,speed) 

przyjmuje  wcześniej  przeliczone  wierzchołki  linii  prądu,    prędkość  kątową  rotacji  i  prędkość  przepływu.  Macierz  vertices  jest  macierzą  obiektową  (cell  array
wektorów linii prądu (tak, jak w przypadku funkcji stream3). Macierze XYZcav i speed są macierzami 3-D. 

background image

 

30

Funkcja streamribbon 

W przypadku funkcji:

streamribbon(vertices,cav,speed) 

macierze współrzędnych XY i Z są przyjmowane zgodnie z poleceniem:

[X,Y,Z] = meshgrid(1:n,1:m,1:p) gdzie [m,n,p] = size(cav)

Funkcja: 

streamribbon(vertices,twistangle) 

wykorzystuje  macierz  obiektową  (cell  array)  wektorów  kąta  skręcenia  określającą  skręcenie  wstęg  linii  prądu  (w  radianach).  Wymiary  odpowiadających  sobie  elementów  macierzy  wierzchołków  oraz  kątów  skręcenia 
muszą być sobie równe. 

W przypadku funkcji:

streamribbon(...,width) 

istnieje możliwość określenia grubości wstęg linii prądu. 

background image

 

31

Funkcja streamribbon 

Przykład 1:
Przy pomocy wykresu wstęgowego linii prądu przedstawić strumień wiatru. Dane obejmują współrzędne prędkości strumienia wiatru, składowe wektorów prędkości i położenie początkowe wstęg linii 
prądu. 

load wind
[sx sy sz] = meshgrid(80,20:10:50,0:5:15);
daspect([1 1 1])
streamribbon(x,y,z,u,v,w,sx,sy,sz);

%-----Deficja widoku i oświetlenia

axis tight
shading interp;
view(3);
camlight; lighting gouraud

background image

 

32

Funkcja streamribbon 

background image

 

33

Funkcja streamribbon 

Przykład 2:
Wykorzystać wcześniej wyznaczone wierzchołki linii prądu (funkcja stream3), prędkość kątową rotacji (curl) oraz prędkość:

Powyższe wielkości pozwalają zmodyfikować początkowo wczytane dane zwarte w pliku wind.mat. Prędkość wiatru zostaje zredukowana o 10 w porównaniu z prędkością wiatru z poprzedniego przypadku.

load wind
[sx sy sz] = meshgrid(80,20:10:50,0:5:15);
daspect([1 1 1])
verts = stream3(x,y,z,u,v,w,sx,sy,sz);
cav = curl(x,y,z,u,v,w);
spd = sqrt(u.^2 + v.^2 + w.^2).*.1;
streamribbon(verts,x,y,z,cav,spd);

2

2

2

w

v

u

background image

 

34

Funkcja streamribbon 

%-----Definicja widoku i oświetlenia

axis tight
shading interp
view(3)
camlight; lighting gouraud

background image

 

35

Funkcja streamribbon 

background image

 

36

Funkcja streamribbon 

Przykład 3:
W przykładzie tym określony jest kąt skręcenia wstęgi przepływu:

t = 0:.15:15;
verts = {[cos(t)' sin(t)' (t/3)']};
twistangle = {cos(t)'};
daspect([1 1 1])
streamribbon(verts,twistangle);

%-----Definicja widoku i oświetlenia

axis tight
shading interp;
view(3);
camlight; lighting gouraud

background image

 

37

Funkcja streamribbon 

background image

 

38

Funkcja streamribbon 

Przykład 4:
Połączenie wykresu stożkowego (funkcja coneplot) i wstęg strumienia w jednym oknie rysunkowym:

%-----Definicja macierzy 3-D: x, y, z, u, v, w

xmin = -7; xmax = 7;
ymin = -7; ymax = 7; 
zmin = -7; zmax = 7; 
x = linspace(xmin,xmax,30);
y = linspace(ymin,ymax,20);
z = linspace(zmin,zmax,20);
[x y z] = meshgrid(x,y,z);
u = y; v = -x; w = 0*x+1;
daspect([1 1 1]);
[cx cy cz] = meshgrid(linspace(xmin,xmax,30),...
    linspace(ymin,ymax,30),[-3 4]);

background image

 

39

Funkcja streamribbon 

h = coneplot(x,y,z,u,v,w,cx,cy,cz,'quiver');
set(h,'color','k');

%-----Wykres dwóch zbiorów wstęg

[sx sy sz] = meshgrid([-1 0 1],[-1 0 1],-6);
streamribbon(x,y,z,u,v,w,sx,sy,sz);
[sx sy sz] = meshgrid([1:6],[0],-6);
streamribbon(x,y,z,u,v,w,sx,sy,sz);

%-----Definicja widoku i oświetlenia

shading interp
view(-30,10) ; axis off tight
camproj perspective; camva(66); camlookat; 
camdolly(0,0,.5,'fixtarget')
camlight

background image

 

40

Funkcja streamribbon 


Document Outline