|
|
Řádek 1: |
Řádek 1: |
| {{Geoinformatika}} | | {{Geoinformatika}} |
| {{Cvičení|155GIT1|9|Grafy funkcí}} | | {{Cvičení|155GIT1|9|Python}} |
|
| |
|
| == Náplň cvičení == | | == Náplň cvičení == |
|
| |
|
| # grafické okno <code>figure</code> | | # |
| # grafy funkcí <code>plot(), subplot(), polar()</code> | | # |
|
| |
|
| == Ukázky == | | == Ukázky == |
|
| |
|
| === Grafické okno ===
| |
|
| |
| <source lang=octave>
| |
| figure # -> 1
| |
| figure # -> 2
| |
| figure(4) # -> 4
| |
| </source>
| |
|
| |
| * Pro zavření všech grafických oken najednou funguje příkaz
| |
| <source lang=octave>
| |
| close all
| |
| </source>
| |
|
| |
| === Grafy funkcí ===
| |
|
| |
| * <code>plot()</code> {{bullet}} [http://geo.fsv.cvut.cz/user/gin/git1/matlab.pdf#page=94 argumenty]
| |
|
| |
| <source lang=octave>
| |
| x = [0:3:360];
| |
| y = sin(x*pi/180);
| |
| plot(x, y);
| |
| %
| |
| % nove okno
| |
| figure(2)
| |
| plot(x, y, 'r+')
| |
| %
| |
| % vice grafu najednou
| |
| figure(3)
| |
| z = cos(x*pi/180);
| |
| plot(x, y, '--b', x, z, ':k');
| |
| </source>
| |
|
| |
| {{fig|octave-graf-1|<code>plot(x, y, '--b', x, z, ':k')</code>}}
| |
|
| |
| ==== Popisky grafů ====
| |
|
| |
| <source lang=octave>
| |
| figure(4)
| |
| hold on % zapne kresleni grafu do aktivniho okna bez vymazani predchoziho obsahu
| |
| plot(x,y,'m');
| |
| plot(x,z,'b');
| |
| title('Funkce sinus a cosinus')
| |
| xlabel('argument ve stupnich')
| |
| ylabel('funkcni hodnota')
| |
| xlim([0 360])
| |
| ylim([-1.2 1.2])
| |
| box on
| |
| %
| |
| % legenda
| |
| legend('sinus','cosinus','Location','SouthWest')
| |
| % prvni argumenty ('sinus','cosinus') jsou polozky legendy
| |
| % 'Location' je jedna z vlastnosti objektu legend a bezprostredne po ni nasleduje nastaveni pripustne hodnoty teto vlastnosti ('SouthWest')
| |
| % V Matlabu lze pouzit i vhodnejsi umisteni legendy (nejmensi kolize s grafem)
| |
| legend('sinus','cosinus','Location','Best')
| |
| % popr. zapis, ktery umisti legendu mimo plochu grafu
| |
| legend('sinus','cosinus',-1)
| |
| %
| |
| grid on
| |
| plot([0 360],[0 0],'k') % vykresleni osy x plnou cernou carou
| |
| hold off
| |
| </source>
| |
|
| |
| {{fig|octave-graf-4|Graf s popisky}}
| |
|
| |
| ==== Více grafů v jednom okně ====
| |
|
| |
| <source lang=octave>
| |
| x = 1:100;
| |
| figure(5)
| |
| % prvni graf
| |
| subplot(2, 2, 1)
| |
| plot(x, x)
| |
| % druhy graf
| |
| subplot(2, 2, 2)
| |
| plot(x, sqrt(x))
| |
| % treti graf
| |
| subplot(2, 2, 3)
| |
| plot(x, log(x))
| |
| % ctvrty graf
| |
| subplot(2, 2, 4)
| |
| plot(x, x.^2)
| |
| </source>
| |
|
| |
| {{fig|octave-graf-2|<code>subplot()</code>}}
| |
|
| |
| ==== Omezení oblasti grafu ====
| |
|
| |
| <source lang=octave>
| |
| x = 0:0.1:5;
| |
| y = exp(x);
| |
| figure(6)
| |
| % cely graf
| |
| subplot(2, 1, 1)
| |
| plot(x, y)
| |
| % vysek grafu pro oblast x <1, 2>; y <0, 10>
| |
| subplot(2, 1, 2)
| |
| plot(x, y)
| |
| axis([1,2,0,10])
| |
| </source>
| |
|
| |
| {{fig|octave-graf-3|<code>axis()</code>}}
| |
|
| |
| ==== Graf s orientaci os v S-JTSK ====
| |
|
| |
| Vstupní data: [http://geo102.fsv.cvut.cz/vyuka/155GIT1/data/body.txt body.txt]
| |
|
| |
| <source lang=octave>
| |
| % nacteni dat
| |
| vstup = fopen('body.txt','r');
| |
| P = fscanf(vstup,'%f',[3 inf]);
| |
| BYX = P';
| |
| fclose(vstup);
| |
|
| |
| % vypocet smerniku
| |
| stan = [4001 730288.89 1054582.63]; % cb Y X (stanovisko)
| |
| DY = BYX(:,2) - stan(2);
| |
| DX = BYX(:,3) - stan(3);
| |
| sig = atan2(DY,DX); % v radianech
| |
| sig = sig*200/pi;
| |
| % prevod smerniku do intervalu <0,400>
| |
| for i=1:length(sig)
| |
| if sig(i)<0
| |
| sig(i)=sig(i)+400;
| |
| end
| |
| end
| |
| sig % kontrolni zobrazeni vypoctenych hodnot smerniku
| |
|
| |
| % kontrolni graf v JTSK
| |
| figure(7)
| |
| x = BYX(:,3);
| |
| y = BYX(:,2);
| |
| cb = BYX(:,1);
| |
| plot(-y,-x,'.r',-1*stan(2),-1*stan(3),'.b');
| |
| for i=1:size(BYX,1)
| |
| cislab = num2str(cb(i)); % prevod numericke hodnoty na format string
| |
| text(-y(i)+0.4,-x(i),cislab);
| |
| end
| |
| cislos = stan(1);
| |
| text(-1*stan(2),-1*stan(3),num2str(cislos));
| |
| title('body v JTSK');
| |
| xlabel('Y'); ylabel('X');
| |
| %
| |
| % v Matlabu je mozne i dalsi siroke ovladani vzhledu grafu, napr.:
| |
| % ----------------------------------------------------------------
| |
| % nastaveni pozice popisu os pro aktivni osy
| |
| set(gca,'XAxisLocation','top','YAxisLocation','right'); % gca - vrati identifikator pro objekt aktivnich os
| |
| %
| |
| % zapis spravnych numerickych hodnot poradnic na (matlabovske) ose x
| |
| krokx = 10; % rozestup poradnic
| |
| poradnicex = (-1*ceil(max(y)/10)*10) : krokx : (-1*floor(min(y)/10)*10) % definice okrouhlych hodnot poradnic
| |
| xlim([poradnicex(1) poradnicex(end)]);
| |
| set(gca,'XTick',poradnicex); % definice rysek poradnic
| |
| set(gca,'XTickLabel',sprintf('%.0f|',-poradnicex)); % definice popisu rysek poradnic spolu s nastavenim jejich formatu
| |
| %
| |
| % zapis spravnych numerickych hodnot poradnic na (matlabovske) ose y
| |
| kroky = 10;
| |
| poradnicey = (-1*ceil(max(x)/10)*10) : kroky : (-1*floor(min(x)/10)*10)
| |
| ylim([poradnicey(1) poradnicey(end)]);
| |
| set(gca,'YTick',poradnicey);
| |
| set(gca,'YTickLabel',sprintf('%.0f|',-poradnicey));
| |
| </source>
| |
|
| |
| ==== Polární graf ====
| |
| * např. zobrazení polohy satelitu (tzv. Skyplot)
| |
|
| |
| <source lang=octave>
| |
| ele = [80 30 10 50]; % elevacni uhel satelitu [°]
| |
| azi = [10 110 220 330]; % azimut satelitu [°]
| |
| azi = azi*pi/180;
| |
| figure(8)
| |
| polar(pi/2-azi,90-ele,'*');
| |
| </source>
| |
|
| |
|
| == Úlohy == | | == Úlohy == |
|
| |
|
| * [[155GIT1 / 9. cvičení / Příklady|9. cvičení - příklady]] | | * [[155GIT1 / 9. cvičení / Příklady|9. cvičení - příklady]] |