background image

 

Wszelkie prawa do zada

ń

, plików  i instrukcji s

ą

 zastrze

ż

one, nikt poza prowadz

ą

cymi zaj

ę

cia i studentami IA na AGH nie ma prawa ich 

wykorzystywa

ć

.  A tych co maj

ą

 takie prawa, prosz

ę

, aby nie umieszczali ich w innym miejscu w sieci.  

 

Grafika 3D 

  Prosz

ę

, aby ka

ż

de zadanie było rozwi

ą

zane w innym skrypcie. 

Wszystkie skrypty i funkcje  maj

ą

 by

ć

 zapisane w dowolnym  folderze nale

żą

cym  

do Pa

ń

stwa. 

  

cz

ęść

 I – funkcja plot3  

 
plot3(x,y,z)
 rysuje funkcje np. w postaci parametrycznej, przy czym x, y, z – s

ą

 to wektory o takim 

samym rozmiarze (wszystkie wektory maj

ą

 mie

ć

 tyle samo elementów). 

 

Zad1. Prosz

ę

 przekopiowa

ć

 tre

ść

 poni

ż

szego skryptu na swój komputer.  

 
figure(1)  
t=0:.1:12; x=t; y=sin(t); z=cos(t);  
plot3(x,y,z) 
grid 

on

 

W drugim oknie prosz

ę

 narysowa

ć

 ten sam wykres, ale dla zrównanych jednostek  

na osiach, za pomoc

ą

 powy

ż

szych polece

ń

 oraz polecenia  

axis equal 
Wykorzystuj

ą

c edytor wła

ś

ciwo

ś

ci oraz przegl

ą

dark

ę

 obiektów 

prosz

ę

 opisa

ć

 osie „x”, ”y” i „z”. 

 

Zad 2. Oto współrz

ę

dne punktów: x = [1 1 -1 1]; y = [4 4 4 4]; z = [-1 1 1 -1]; 

Prosz

ę

 narysowa

ć

 trójk

ą

t, który powstanie z powy

ż

szych punktów, czerwon

ą

 lini

ą

 o grubo

ś

ci 6 

(…'LineWidth',6).  

  

 

 

cz

ęść

 II –  wykresy  3D  

siatki powierzchni  
i powierzchnie  

 

2.1 

Funkcja meshgrid i mesh 

Funkcja meshgrid 

 [X , Y] = meshgrid (x, y) przekształca wektory x i y w macierze X i Y, po to, aby powstała 
siatka punktów, które u

ż

ywamy do znajdowania warto

ś

ci funkcji dwóch zmiennych  

i generowania trójwymiarowych wykresów. Wiersze wynikowej macierzy X s

ą

 kopiami wektora 

x, kolumny wynikowej macierzy Y s

ą

 kopiami wektora y. 

Funkcja mesh  

mesh (X, Y, Z) rysuje szkielet  siatki  

 

background image

 

 

Zad 3. Prosz

ę

 stworzy

ć

 skrypt, który zawiera poni

ż

sze polecenia:

 

clear 

all

 

x=-5:5; 
y=-10:10; 
[X, Y]=meshgrid(x,y) 
 
Prosz

ę

 sprawdzi

ć

 jak została wygenerowana siatka X i Y, a potem wstawi

ć

 ; po poleceniu 

 [X, Y]=meshgrid(x,y); 
 

I wykorzystuj

ą

c powy

ż

sz

ą

 siatk

ę

 punktów prosz

ę

 narysowa

ć

 wykres funkcji:

 

݂ሺݔ, ݕሻ = ܺ

+ 3ܻܺ

+ 12ܻܺ

 

 

W drugim oknie dla tych samych danych prosz

ę

 narysowa

ć

 powierzchni

ę

  

za pomoc

ą

 polecenia surf(X,Y,Z). Prosz

ę

 doło

ż

y

ć

 wska

ź

nik colorbar do obu okien. 

 

Funkcja surf(X,Y,Z) – rysuje powierzchni

ę

 kolorow

ą

 opisan

ą

 przez macierze X,Y,Z. 

 

2.2. Rysowanie siatki powierzchni za pomoc

ą

:  mesh(x,y,z),  meshc(x,y,z) - meshz(x,y,z)  

i waterfall(x,y,z)  

Zad 4. Dla nast

ę

puj

ą

cych danych: x=0:0.5:10;y=0:.5:5; z=sin(y)'*cos(x);  

w jednym oknie i na 4 wykresach prosz

ę

 narysowa

ć

 funkcje

 

mesh(x,y,z),  meshc(x,y,z) - 

meshz(x,y,z) i waterfall(x,y,z). Korzystaj

ą

c z poni

ż

szej tabelki prosz

ę

 opisa

ć

 wykresy poprzez 

dodanie tytułów.   

 

mesh 

Wykres siatkowy 

meshc  Wykres siatkowy + poziomice 

meshz  Wykres siatkowy + zasłony na ko

ń

cach 

ribbon  Wykres wst

ąż

kowy 

surf  

Wykres powierzchniowy 

surfc 

Wykres powierzchniowy + poziomice 

surfl 

Wykres powierzchniowy + cieniowanie 

waterfall 

funkcja waterfall(x, y, z, c) działa podobnie jak meshz z ta ró

ż

nic

ą

ż

e nie 

rysuje linii odpowiadaj

ą

cych kolumnom macierzy 

 

2.2. Rysowanie  powierzchni za pomoc

ą

:  surf, surfc, surfl  

Zad 5. Dla nast

ę

puj

ą

cych danych: x=0:0.5:10;y=0:.5:5; z=sin(y)'*cos(x);  

a) 

w pierwszym oknie na 3 wykresach prosz

ę

 narysowa

ć

 funkcje surf, surfc, surfl 

 

b) 

w dugim oknie  na trzech wykresach dla surf prosz

ę

 sprawdzi

ć

 jak działa przejrzysto

ść

 

alpha 

background image

 

ustawiaj

ą

c w kolejnych oknach alpha(0) alpha(0.5) i alpha(1). Prosz

ę

 sprawdzi

ć

 te

ż

 

ukrywanie kraw

ę

dzi: 

hidden on

 

Wyświetlanie ukrytych krawędzi

 

hidden off

 

Domyślny, ukrywa niewidoczne krawędzie

 

 
 

c) 

w trzecim oknie sterujemy kolorem i wy

ś

wietlaniem siatki oraz kolorem powierzchni  

za pomoc

ą

 instrukcji:

 

 

surf(x,y,z,'FaceColor',[0.5 0.5 0.5], 'EdgeColor','red')  
surf(x,y,z,'FaceColor','blue', 'EdgeColor','none')

  

–prosz

ę

 sprawdzi

ć

 jak działa dodatkowo  

camlight left ( mo

ż

e zamiast left lepiej b

ę

dzie:

 

headlightleft,  right 

lighting phong (phongflatgouraudnone) 

je

ś

li nie wida

ć

 zmian, prosz

ę

 zmieni

ć

 kolor siatki i powierzchni 

d) 

w czwartym oknie 

ć

wiczymy cienie - potrzebujemy do tego trzy wykresy funkcji  

z=x*exp(-x

2

-y

2

), pierwszy jest na rysunku poni

ż

ej:

 

 

 

 

drugi wykres powinien by

ć

 narysowany za pomoc

ą

 funkcji:

 

surfl(x,y,z), a trzeci mie

ć

 

dodatkowo doło

ż

on

ą

 do surfl(x,y,z) funkcj

ę

 shading interp

shading flat

 

Powierzchnia z dyskretnymi kolorami

 

shading interp

 

Powierzchnia z wypełnieniem kolorami interpolowanymi

 

shading faceted

 

Powierzchnia z dyskretnymi kolorami i siatka

 

 

e) 

w pi

ą

tym oknie zobaczymy jakie s

ą

 mo

ż

liwo

ś

ci wy

ś

wietlania poziomic. Znowu podzielimy  

okno na 4 wykresy. Bazowym wykresem niech b

ę

dzie

:  

 
x=0:0.1:10;y=0:.1:5; z=sin(y)'*cos(x); meshc(x,y,z) 

 

background image

 

Korzystaj

ą

c z polecenia:  

contour(x,y,z,n) – kre

ś

lenie poziomic (wykres konturowy), gdzie – liczba poziomic 

prosz

ę

 wykre

ś

li

ć

 3 poziomice  

 i w kolejnym okienku trzy poziomice opisane: 

[c,h]=contour(x,y,z,n) 
clabel(c,h);  
 

Prosz

ę

 sprawdzi

ć

 jak działa polecenie contourf(x,y,z,5), w ostatnim, czwartym wykresie. 

 
 

 

cz

ęść

 IV – dodatkowe wykresy w grafice 3D  

bar3, ribbon 

 
Zad 6. Dowoln

ą

 funkcj

ę

 3D prosz

ę

 przedstawi

ć

 za pomoc

ą

 

polecenia 

ribbon(Y,Z) 

 

Zad 7. Dla wylosowanych danych Y=round(rand(10,4)*100) na trzech ró

ż

nych wykresach prosz

ę

 

sprawdzi

ć

 jak działa:  

bar3(Y,

'detached'

bar3(Y,

'grouped'

bar3(Y,

'stacked'

) W ka

ż

dym wykresie prosz

ę

 zmieni

ć

 domy

ś

lny punkt obserwacji 

 

view 

Zmiana domy

ś

lnego punktu obserwacji 

view(azymut, elewacja) 

Okre

ś

la punkt obserwacyjny za pomoc

ą

 azymutu i 

elewacji 

view([x,y,z]) 

Okre

ś

la punkt obserwacji w układzie kartezja

ń

skim 

view(2) 

Obserwacja azymut=0, elewacja=90 

view(3) 

Domy

ś

lny punkt obserwacji: azymut=-37.5 , 

elewacja= 30 

 

 

cz

ęść

 V – animacje 

 

funkcja comet(x,y); - to animacja ruchu komety. x,y – to współrz

ę

dne poło

ż

enia. 

 

Zad 8. Prosz

ę

 napisa

ć

 skrypt, w którym za pomoc

ą

 animacji mo

ż

emy zobaczy

ć

 ruch 

komety po torze, który jest elips

ą

 

Funkcje getframe i movie, to kolejny przykład animacji. Ka

ż

de polecenie plot generuje 

nowe okno, zawarto

ść

 tego okna mo

ż

na przy pomocy polecenie getframe zapisa

ć

 np.: w tablicy. 

Utworzone tablice odtwarzamy wykorzystuj

ą

c polecenie movie.  Jako przykład wykorzystania tych 

funkcji podaje si

ę

 poni

ż

szy skrypt :  

  

for k = 1:16 

background image

 

plot(fft(eye(k+16))) 
axis equal 
M(k) = getframe; 
end 
movie(M,30) 
 

Zad 9. Prosz

ę

 napisa

ć

 skrypt, w którym za pomoc

ą

 animacji mo

ż

emy zobaczy

ć

 kolejne 

etapy rysowania funkcji sinus. 

Przy braku pomysłu na rozwi

ą

zanie prosz

ę

 przej

ś

c do 

kolejnego zadania, jest tam ukryta podpowied

ź

.

   

 

drawnow – aktualizacja okna 

 

Zad 10. Oto przykład rysowania funkcji  przy pomocy polecenia drawnow  

x = -2*pi:pi/20:2*pi; 
for i=1:8 
plot(x(1:i*10),cos(x(1:i*10))) 
axis([-2*pi 2*pi -1 1]) 
drawnow 
pause(0.1) 
end; 

 
Prosz

ę

 wykorzystuj

ą

c dranow narysowa

ć

 dowolny wykres funkcji oraz dowoln

ą

 

powierzchni

ę

.  

 

cz

ęść

 VI – walec, kula, wielok

ą

t, elipsoida 

cylinder 

Generacja walca 

elipsoid 

Generacja elipsoidy 

(nie działa w pracowni)

 

fill3 

Generacja wielok

ą

ta 

( nie działa w pracowni)

 

sphere 

Generacja kuli 

 

Zad 11. Prosz

ę

 wygenerowa

ć

 figury podane w powy

ż

szej tabeli i za pomoc

ą

 polecenia slice 

przeci

ąć

 dwie z tych figur dowoln

ą

 płaszczyzn

ą