instrukcja - Transportu
instrukcja - Transportu
instrukcja - Transportu
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Laboratorium z informatyki sem. II/ćw. 5 Wydział <strong>Transportu</strong> PW - 2012/13<br />
INSTRUKCJA DO ĆWICZENIA 5<br />
I Przykład apletu z animacją - tworzenie obrazu wahadła<br />
1. Utwórz nowy projekt typu Java Class Library pod nazwą Aplet3 i zapisz go<br />
w folderze roboczym; dodaj do niego klasę typu JApplet o nazwie Animacja2,<br />
umieszczając ją w pakiecie aplet3.<br />
2. Zmień kolor tła apletu na jasnoszary i ustal rozmiary okna na 500×300.<br />
Odpowiednio zmień wartości parametrów w pliku .html .<br />
3. Dodaj do pakietu aplet3 projektu nową klasę Javy o nazwie Wahadło.<br />
Poniżej nagłówka klasy Wahadło dodaj następujące deklaracje zmiennych:<br />
double t, alfa;<br />
double alfa0 = 30*Math.PI/180;<br />
double dt = 0.004;<br />
int x0, y0;<br />
int d = 250;<br />
// czas i bieżący kąt wychylenia<br />
// początkowy kąt wychylenia<br />
// przyrost czasu<br />
// współrzędne punktu zaczepienia wahadła<br />
// długość nitki<br />
Color k;<br />
4. Utwórz konstruktor o sygnaturze Wahadło(int X0, int Y0, Color K) i w jego treści wpisz instrukcje przypisujące<br />
odpowiednim polom klasy Wahadło wartości początkowe podane jako parametry konstruktora.<br />
x0=X0; y0=Y0; k=K;<br />
5. Utwórz metodę klasy Wahadło , która rysuje wahadło na kanwie obiektu graficznego::<br />
void rysuj(Graphics g){<br />
g.setColor(k);<br />
int x=x0+(int)(d*Math.sin(alfa));<br />
int y=y0+(int)(d*Math.cos(alfa));<br />
g.drawLine(x0, y0, x,y);<br />
g.fillOval(x-10, y-10, 20, 20);<br />
// x, y – współrzędne położenia ciężarka wahadła<br />
// linia od punktu x 0 , y 0 do punktu x, y<br />
// koło o średnicy 20, ze środkiem w punkcie x, y<br />
}<br />
6. Pod nagłówkiem klasy apletu Animacja2 wpisz deklarację obiektu W klasy Wahadło.<br />
7. Na końcu metody init() dodaj instrukcję tworzącą obiekt klasy Wahadło i przypisującą go zmiennej W:<br />
W = new Wahadło(getWidth() / 2, 30, Color.blue);<br />
8. W klasie Animacja2 utwórz metodę paint():<br />
public void paint(Graphics g) {<br />
g.clearRect(0, 0, getWidth(), getHeight() );<br />
g.setColor(Color.BLACK);<br />
g.setFont(new Font("SanSerif", Font.ITALIC, 20));<br />
g.drawString("WAHADŁO MATEMATYCZNE", 10, 20);<br />
W.rysuj(g);<br />
//wywołanie metody rysuj() klasy Wahadło<br />
}<br />
9. Uruchom aplet.<br />
II Symulacja ruchu wahadła<br />
1. W klasie Wahadło dopisz metodę zmiany wychylenia wahadła w zależności od czasu i kąta początkowego:<br />
void wychyl(){<br />
t+=dt;<br />
alfa=alfa0*Math.cos(Math.sqrt(981/d/0.0375)*t);<br />
// przyrost czasu o wartość dt<br />
//równanie wahadła matematycznego<br />
}<br />
2. W klasie apletu, na początku metody paint() dopisz instrukcje, które po przemieszczeniu wahadła metodą<br />
wychyl() wstrzymują wykonanie programu na 10 milisekund, a następnie ponownie odrysowują okno apletu<br />
wywołaniem metody repaint():<br />
W.wychyl();<br />
try {<br />
Thread.sleep(10);<br />
} catch (InterruptedException e) {}<br />
repaint();<br />
3. Uruchom aplet.<br />
III Uruchamianie i zatrzymywanie animacji<br />
1. W klasie Wahadło zadeklaruj zmienną logiczną (typu boolean) o nazwie ruch, która będzie zawierać informację,<br />
czy wahadło jest w ruchu. Umieść treść metody wychyl()wewnątrz instrukcji warunkowej:<br />
if(ruch) {<br />
// dotychczasowa treść metody<br />
}<br />
2. Dopisz w klasie Wahadło metody uruchamiania i zatrzymywania wahadła:<br />
public void start(double Alfa0){<br />
if(!ruch) {<br />
alfa0=Alfa0; ruch=true; t=0;}<br />
}<br />
Materiały do użytku wewnętrznego strona 1
Laboratorium z informatyki sem. II/ćw. 5 Wydział <strong>Transportu</strong> PW - 2012/13<br />
public void stop(){<br />
alfa0=0; alfa=0; ruch=false;<br />
}<br />
3. Aby umożliwić uruchamianie i zatrzymywanie wahadła za pomocą myszy, dodaj do nagłówka apletu słowa<br />
implements MouseListener. Zaimportuj ten interfejs, utwórz wszystkie jego abstrakcyjne metody, usuń w nich<br />
instrukcje throw … wyrzucające wyjątek, a metodę mousePressed() uzupełnij do postaci:<br />
public void mousePressed(MouseEvent e) {<br />
if(e.getButton() == MouseEvent.BUTTON1){<br />
int x=e.getX();<br />
int y=e.getY();<br />
W.start(Math.atan2(x-getWidth()/2, y-30));<br />
}else W.stop();<br />
}<br />
4. Uzupełnij metodę init() instrukcją dodającą nasłuch akcji: addMouseListener(this);<br />
5. Uruchom aplet i sprawdź jego działanie.<br />
// początkowy kąt wychylenia jest wskazany myszą<br />
IV Przykład apletu z animacją – symulacja kuli bilardowej<br />
1. Utwórz nowy projekt typu Java Class Library zapisz go w folderze roboczym<br />
pod nazwą Aplet4. Dodaj do projektu klasę typu JApplet o nazwie Kula.<br />
2. Na początku klasy Kula umieść następujące deklaracje pól:<br />
int x=0, y=0, d=30, dx = 3, dy = 5 , dt=20;<br />
3. W treści metody init() wpisz wywołanie metody ustawiającej kolor tła:<br />
setBackground(Color.green);<br />
4. Utwórz metodę paint(), która na kanwie obiektu graficznego ma rysować kulę jako<br />
czerwone koło wpisane w kwadrat o lewym górnym wierzchołku (x, y) i boku d:<br />
public void paint(Graphics g) {<br />
g.clearRect(0, 0, getWidth(), getHeight());<br />
g.setColor(Color.red);<br />
g.fillOval(x, y, d, d);<br />
}<br />
5. Uruchom aplet, a następnie dopisz na początku metody paint() instrukcje, które spowodują rysowanie kuli<br />
w odstępach czasu dt oraz przesunięcie kuli o wektor (dx, dy) i zmianę kierunku ruchu, jeśli kula dotarła do<br />
brzegu okna:<br />
public void paint(Graphics g) {<br />
x += dx; y += dy;<br />
if (x >= getWidth()-d || x = getHeight()-d || y
Laboratorium z informatyki sem. II/ćw. 5 Wydział <strong>Transportu</strong> PW - 2012/13<br />
Pliki z obrazkami są czytane za pomocą konstruktora klasy ImageIcon, który umożliwia wczytywanie plików<br />
graficznych GIF, JPG lub PNG. Parametr konstruktora ImageIcon() określa adres URL pliku graficznego.<br />
5. Utwórz metodę paint(), wpisując w niej instrukcje rysowania kolejnego obrazka:<br />
public void paint(Graphics g) {<br />
try {<br />
rys [nr].paintIcon(null, g, 100, 50);<br />
}catch (Exception e) { g.drawString("Błąd grafiki", 100, 100);}<br />
}<br />
6. Uruchom aplet a następnie dopisz w treści metody paint() instrukcje, które w odstępach czasu dt będą rysować<br />
kolejne klatki animacji o numerach od 0 do 16:<br />
public void paint(Graphics g) {<br />
// dotychczasowa treść metody<br />
nr++; // zwiększenie nr o 1<br />
if (nr > 16) {nr = 0;}<br />
// jeżeli nr przekroczył 16, jest ponownie zerowany<br />
try {<br />
Thread.sleep(dt);<br />
} catch (InterruptedException e){}<br />
repaint();<br />
}<br />
7. Uruchom aplet. Spróbuj w ten sam sposób wykonać animację wykorzystując przykładowe obrazki z pakietu JDK,<br />
które znajdziesz w folderze X:\Informatyka\I1\Beans<br />
Zadania do samodzielnego wykonania<br />
1. Zmiana koloru kuli. Zmodyfikuj Aplet4 tak, aby przy odbiciu kuli od krawędzi okna kolor kuli zmieniał się na<br />
losowy odcień czerwieni.<br />
Wskazówka: W klasie Kula zadeklaruj nowe pole klasy Color o nazwie kolor i wartości początkowej Color.RED;<br />
wykorzystaj to pole w metodzie paint(), jako parametr wywołania metody g.setColor().<br />
W metodzie paint() dopisz w odpowiednich miejscach instrukcję zmieniającą wartość pola kolor:<br />
kolor=new Color((int)(256*Math.random()), 0, 0);<br />
2. Wykorzystanie myszy do uruchamiania i zatrzymywania kuli. Zmodyfikuj Aplet4 tak, aby umożliwić uruchamianie<br />
i zatrzymywanie kuli po naciśnięciu lewego lub prawego przycisku myszy w oknie apletu.<br />
Wskazówka: W klasie Kula zadeklaruj nową zmienną typu boolean o nazwie ruch. W metodzie paint() wykorzystaj<br />
tę zmienną, umieszczając instrukcje zmieniające położenie kuli wewnątrz instrukcji warunkowej:<br />
if (ruch) {<br />
x += dx; y += dy;<br />
}<br />
Zaimplementuj interfejs MouseListener, zaimportuj go i utwórz wszystkie jego abstrakcyjne metody, usuń w nich<br />
instrukcje throw wyrzucające wyjątek, a w metodzie mousePressed() wpisz instrukcję zmieniającą wartość zmiennej<br />
ruch na true albo false, zależnie od tego, który przycisk myszy został naciśnięty.<br />
3. Wesoły bałwan. Utwórz nowy aplet z ruchomym bałwankiem, rysowanym na kanwie<br />
graficznej za pomocą kilku elips, odcinka i prostokąta (jak na rysunku obok).<br />
Bałwanek porusza się pionowo od środka dolnej krawędzi okna do połowy wysokości,<br />
po czym zawraca do dołu okna, gdzie rozpoczyna kolejny ruch do góry itd.<br />
Wskazówka: Wzorując się na symulacji kuli bilardowej utwórz nowy aplet lub skopiuj<br />
projekt Aplet4 i zmodyfikuj jego treść. W metodzie rysuj() wpisz instrukcje, które zamiast<br />
jednego koła pozwolą narysować złożoną figurę. Wybierz jeden punkt (x, y), będący<br />
punktem odniesienia dla rysowanych figur. W metodzie paint() odpowiednio zmodyfikuj<br />
warunek zmiany kierunku ruchu.<br />
4. Zmiana kierunku ruchu w animacji poklatkowej.<br />
Zmodyfikuj Aplet5 tak, aby Duke (maskotka Javy) przesuwał się na zmianę raz w lewo, raz w prawo.<br />
Wskazówka: W klasie Obrazki zadeklaruj pole typu boolean o nazwie powrót. W metodzie paint(), wewnątrz instrukcji<br />
if (nr > 16) {…} (po wyświetleniu 17-tu klatek) zmieniaj wartość tego pola na przeciwną instrukcją powrót = !powrót;<br />
W metodzie rysuj(), przy pomocy instrukcji warunkowej, określ numer obrazka wyświetlanego metodą paintIcon() jako<br />
nr, jeżeli pole powrót ma wartość false lub jako 16-nr, jeżeli pole powrót ma wartość true.<br />
Materiały do użytku wewnętrznego strona 3