przykłady użycia przykłady użycia Handle Graphics i graficznego
Transkrypt
przykłady użycia przykłady użycia Handle Graphics i graficznego
MATLAB – przykłady uŜycia
Handle Graphics i graficznego
interfejsu uŜytkownika (GUI)
Grzegorz Grot ETI 9.3
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Przykład 1. Program robaczek.m. Budowanie „od zera” obiektów graficznych i prosta animacja.
%ROBACZEK.M
%ilustracja prostej animacji przy pomocy HANDLE GRAPHICS
%w połączeniu z wysokopoziomowymi poleceniami graficznymi
a = 2;
ile = 200;
x = linspace(-a,a,ile);
y = x.^2-a/2;
skala = [-a:1:a];
okno = figure;
set(gcf,'NumberTitle','Off','MenuBar','None','Name','Robaczek zjada parabolę');
uklad = newplot;
parabola = plot(x,y,'.');
%sprawdź, co się dzieje, gdy w linijce niŜej ustawisz własność 'Erase' na 'Normal' lub 'xor'
wykres = line('color','b','marker','o','Erase','Background', ...
'MarkerFace','red','MarkerSize',12,'xdata',x(1:3),'ydata',y(1:3));
set(uklad,'XLim',[-a,a],'XTick',[]);
set(uklad,'YLim',[-a,a],'YTick',[]);
shg;
for k = 5:ile;
set(wykres,'XData',x(k-4:k),'YData',y(k-4:k));
pause(0.02);
drawnow;
end;
cla;
kontrolatempa = [0.1 : 0.02: 1];
for k = kontrolatempa
text(0,0,'Popatrz jak ten napis znika...',...
'FontSize',16,'FontWeight','Bold','HorizontalAlignment','Center','Color',[k k k]);
pause(0.05);
end;
cla;
set(uklad,'Color',[0 0 0]);
set(gcf,'KeyPressFcn',...
'if double(get(okno,''CurrentCharacter''))==27,close(gcf),end');
text(0,0,'ESC ZAMYKA OKNO','Color','r','FontSize',20,...
'FontWeight','Bold','HorizontalAlignment','Center');
1
Okno programu robaczek.m w czasie trwania
animacji
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Przykład 2. Program wykresy3d. Zastosowanie elementów graficznego interfejsu uŜytkownika. Program rysuje powierzchnie o równaniach parametrycznych podanych
przez uŜytkownika.
%WYKRESY3D.M
%program ilustrujący mechanizmy Graphical User Interface Matlaba
%Ilustracja obiektów FIGURE, AXES, UICONTROL
%program pozwala na wprowadzenie równań parametrycznych powierzchni w R^3
%------------------------------------------------------xstr = 's*cos(t)'; %początkowe równania x(s,t), y(s,t), z(s,t);
ystr = 's*sin(t)';
zstr = 's';
scrsz = get(0,'ScreenSize');%odczytujemy rozmiary ekranu komputera
figure('Position',[0.2 0.2 0.6 0.6].*scrsz([3 4 3 4]));%kreujemy okno graficzne i ustalamy rozmiar
ezsurf(xstr,ystr,zstr);%rysujemy powierzchnie daną równaniami
set(gcf,'NumberTitle','Off');%ustalamy kilka własności okna graficznego - obiekt FIGURE
set(gcf,'Name','Wykresy 3D');
%set(gcf,'MenuBar','None');
set(gca,'Position',[0.05 0.2 0.85 0.7 ]);%ustalamy polozenie obiektu AXES - układu współrzędnych
pozycjaetykiety = [10 60 50 20];%pozycja pierwszej etykiety pola edycyjnego
przesuniecie = [50 0 50 0];%przesuniecie pola edycyjnego wzgl. etykiety
skok = [0 -25 0 0];%połoŜenie nastepnej etykiety
%definiujemy po kolei etykiety pól edycyjnych i same pola
%----- pole do edycji x(s,t)
tip = 'Wpisz wyrazenie zmiennych s i t';
uicontrol('Style','text','Position',pozycjaetykiety,'String',...
'y(s,t) = ','ForegroundColor','b','FontWeight','Bold');
polex = uicontrol('Style','Edit','Position',pozycjaetykiety+przesuniecie,'String',xstr,...
'BackgroundColor','w','HorizontalAlignment','Left','TooltipString',...
tip,'FontWeight','Bold');
%----- pole do edycji y(s,t)
pozycjaetykiety = pozycjaetykiety + skok;
uicontrol('Style','text','Position',pozycjaetykiety,'String',...
'y(s,t) = ','ForegroundColor','b','FontWeight','Bold');
poley = uicontrol('Style','Edit','Position',pozycjaetykiety+przesuniecie,'String',ystr,...
'BackgroundColor','w','HorizontalAlignment','Left','TooltipString',...
tip,'FontWeight','Bold');
pozycjaetykiety = pozycjaetykiety + skok;
%----- pole do edycji z(s,t)
uicontrol('Style','text','Position',pozycjaetykiety,'String',...
'z(s,t) = ','ForegroundColor','b','FontWeight','Bold');
polez = uicontrol('Style','Edit','Position',pozycjaetykiety+przesuniecie,'String',zstr,...
'BackgroundColor','w','HorizontalAlignment','Left','TooltipString',...
tip,'FontWeight','Bold');
%definiujemy przyciski
pozycjapola = [10,30,100,20];
pozycjaguzika1 = pozycjaetykiety + przesuniecie + [200 0 20 20];
pozycjaguzika2 = pozycjaguzika1 + [200 0 20 0];;
guzik1 = uicontrol('Style','PushButton','String','Rysuj teraz',...
'Position',pozycjaguzika1,'Callback',...
'ezsurf(get(polex,''String''),get(poley,''String''),get(polez,''String''))');
guzik2 = uicontrol('Style','PushButton','String','Koniec',...
'Position',pozycjaguzika2,'Callback',...
'close(gcf)');
shg;
2
Okno programu wykresy3d.m
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Przykład 3. Program ambitnewykresy.m. Ilustracja obsługi zdarzeń przez zewnętrzną M-funkcję oraz ilustracja uŜycia gotowych okien dialogowych
Matlaba.
Główny program wyświetla okno graficzne, w którym rysowane są wykresy funkcji jednej zmiennej. Za pośrednictwem pomocniczego okna dialogowego
uŜytkownik moŜe zdefiniować wyraŜenie określające funkcję, przedział, w którym ma być narysowana oraz liczbę punktów podziału dla funkcji plot.
`
Główny program
%AMBITNEWYKRESY.M
%Prosty przyklad graphical user interface
%program rysuje wykres zadanej funkcji w zadanym przedziale
%dokladnie przestudiuj pliki parametrydialog.m i rysujwgparametrow.m
%pamietaj, ze po zakonczeniu pracy tego programu
%okno graficzne jest caly czas aktywne, a przyciski "wrazliwe" na nacisniecie
h = figure; %otwieramy nowe okno graficzne
%ilustracja własności "Modal" - bez zamknięcia okna nie da się uŜywać innych elementów Matlaba
set(h,'WindowStyle','Modal');
set(h,'NumberTitle','Off');
set(h,'Name','Rysowanie krzywych postaci y = f(x)');
uklad = newplot;%jest to zalecany sposob kreowania układu wspolrzednych;
set(uklad,'xlim',[0,2*pi],'ylim',[-1, 1]);
axis([0 1 0 1]);
%definiujemy przyciski akcji
ppg = [20 10]; %polozenie lewego dolnego rogu pierwszego guzika
dlugguzika = 60;
wysguzika = 20;
%definicja przycisku uruchamiającego okno dialogowe parametrów
guzikparametrow = uicontrol('Style','PushButton','String','Parametry','Position',...
[ppg, dlugguzika, wysguzika]);
%definicja przycisku ZAMKNIJ
guzikzamknij = uicontrol('Style','PushButton','String','Zamknij','Position',...
[ppg(1)+dlugguzika+5, ppg(2), dlugguzika, wysguzika]);
%inicjujemy domyślne parametry i zapisujemy je we własności 'UserData' okna graficznego
biezaceparametry = {'exp(-x/20).*sin(x)';'0';'20*pi';'200'};
%zapamietujemy je we własności 'UserData' okna graficznego
set(gcf,'UserData',biezaceparametry);
%robimy pierwszy rysunek - patrz M-funkcja wywolywana w nastepnej linijce
obsluga rysuj;
%podlaczamy obsługę zdarzeń do przycisków;
set(guzikparametrow,'Callback','obsluga parametrydialog');
set(guzikzamknij,'Callback','obsluga zamknij');
set(guzikzamknij,'Callback','obsluga zamknij');
3
Okno programu ambitnewykresy.m
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Przykład 4 Program suwakdemo.m. Ilustracja uŜycia suwaka do sterowania
kolorami powierzchni.
%SUWAKDEMO.M
%ilustracja sterowania skalą kolorów za pomocą suwaka
maksimum = 20;
zakresxy = [0 3 0 2*pi];
wyrx = '2*r*cos(t)'; wyry = 'r*sin(t)';wyrstozek = '3*r';
ezsurf(wyrx,wyry,wyrstozek,zakresxy,30);
colormap hsv;
caxis([0 maksimum]);
slupek = colorbar;
view(-37.5,10);
suwak = uicontrol('Style','Slider','Min',1,'Max',maksimum,...
'Value',maksimum,'Position',[10 10 20 200],'SliderStep',[1/(2*(maksimum-1))
1/(maksimum-1)]);
pole = uicontrol('Style','Edit','Position',[40,10,80,20],'BackgroundColor','white',...
'Enable','Off','Value',maksimum,'String',num2str(maksimum),'HorizontalAlignment','Le
ft');
akcjasuwaka = ...
['wartosc = get(suwak,''Value'');set(pole,''Value'',wartosc);',...
'set(pole,''String'',num2str(wartosc));',...
'caxis([0 wartosc]);colorbar'];
set(suwak,'Callback',akcjasuwaka);
4
Okno programu suwakdemo.m
5