Co to jest aplet? Aplet to obiekt Javy - wyposażony w graficzny interfejs i osadzony w dokumencie HTML.

Podobne dokumenty
Programowanie komputerów Wykład 6: Aplety Java

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

Rysowanie prostych obiektów graficznych przy użyciu biblioteki AWT (Abstract Window Toolkit)

KONKURSY MATEMATYCZNE. Treść zadań

Wstęp do programowania

ROZWIĄZANIA ZADAŃ Zestaw P3 Odpowiedzi do zadań zamkniętych

Grafika i komunikacja człowiek komputer Laboratorium. Część 3: Tekst, czcionki, kolory

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

I. LOGICZNE STRUKTURY DRZEWIASTE

Jak spersonalizować wygląd bloga?

Odpowiedzi i schematy oceniania Arkusz 23 Zadania zamknięte. Wskazówki do rozwiązania. Iloczyn dwóch liczb ujemnych jest liczbą dodatnią, zatem

REJESTRATOR RES800 INSTRUKCJA OBSŁUGI

Elementy animacji sterowanie manipulatorem

Wykład 4 Wybrane zagadnienia programowania w C++

Wyższa Szkoła Zarządzania i Bankowości w Krakowie

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

NUMER IDENTYFIKATORA:

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

Ćwiczenie nr 2 Zbiory rozmyte logika rozmyta Rozmywanie, wnioskowanie, baza reguł, wyostrzanie

Projekt z dnia 2 listopada 2015 r. z dnia r.

Architektura Systemów Komputerowych. Sterowanie programem skoki Przerwania

EGZAMIN MATURALNY Z MATEMATYKI MAJ 2011 POZIOM ROZSZERZONY. Czas pracy: 180 minut. Liczba punktów do uzyskania: 50 WPISUJE ZDAJĄCY

elektroniczna Platforma Usług Administracji Publicznej

Instrukcja obsługi zamka. bibi-z50. (zamek autonomiczny z czytnikiem identyfikatora Mifare)

epuap Ogólna instrukcja organizacyjna kroków dla realizacji integracji

PRZETWORNIK NAPIĘCIE - CZĘSTOTLIWOŚĆ W UKŁADZIE ILORAZOWYM

SSK - Techniki Internetowe

Instrukcja użytkowania DRIVER. Programator z przewodem sterowniczym. DRIVER 610 lub lub 2 strefy DRIVER

Nowe funkcjonalności

Matematyka:Matematyka I - ćwiczenia/granice funkcji

EGZAMIN MATURALNY Z MATEMATYKI

WZORU UŻYTKOWEGO <9)PL m 63278

SKRÓCONA INSTRUKCJA OBSŁUGI ELEKTRONICZNEGO BIURA OBSŁUGI UCZESTNIKA BADANIA BIEGŁOŚCI

A X E S S INSTRUKCJA UŻYTKOWNIKA

Połączenie VPN Host-LAN IPSec z wykorzystaniem Windows XP. 1. Konfiguracja serwera VPN. 2. Konfiguracja klienta VPN. 3. Zainicjowanie połączenia

Harmonogramowanie projektów Zarządzanie czasem

Bazy danych. Andrzej Łachwa, UJ, /15

Efektywność nauczania w Gimnazjum w Lutyni

GEO-SYSTEM Sp. z o.o. GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Podręcznik dla uŝytkowników modułu wyszukiwania danych Warszawa 2007

Miejski System Zarządzania - Katowicka Infrastruktura Informacji Przestrzennej

Zarządzanie Zasobami by CTI. Instrukcja

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

INTERAKTYWNA APLIKACJA MAPOWA MIASTA RYBNIKA INSTRUKCJA OBSŁUGI

Opisy. Ikona: Polecenie: STCFG Menu: Stal Konfiguracja

POLITYKA PRYWATNOŚCI SKLEPU INTERNETOWEGO

InsERT GT Własne COM 1.0

1.Rysowanie wałka. Dostosowanie paska narzędzi Tworzenie nowego wałka. Uniwersytet Technologiczno Przyrodniczy w Bydgoszczy

MATEMATYKA. 1 Podstawowe informacje dotyczące zadań. 2 Zasady poprawnego zapisu odpowiedzi TEST DYDAKTYCZNY

Konfiguracja przeglądarek internetowych oraz Panelu Java dla klientów instutucjonalnych problemy z apletem do logowania/autoryzacji

Warszawa, dnia 11 marca 2016 r. Poz. 327 ROZPORZĄDZENIE. z dnia 7 marca 2016 r.

WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH

DEMERO Automation Systems

PODRĘCZNIK UŻYTKOWNIKA

WNIOSEK O WPIS DO REJESTRU GRUPOWYCH PRAKTYK LEKARSKICH... (nazwa i siedziba Okręgowej/Wojskowej Izby Lekarskiej) przedstawiciela spółki

INSTRUKCJA PROGRAMU BHM SPIS TREŚCI

FUNKCJE STEROWNIKA PK-35 PID

PERSON Kraków

XIII KONKURS MATEMATYCZNY

SPRAWDZIANY Z MATEMATYKI

EGZAMIN MATURALNY Z MATEMATYKI CZERWIEC 2012 POZIOM PODSTAWOWY. Czas pracy: 170 minut. Liczba punktów do uzyskania: 50 WPISUJE ZDAJĄCY

STEROWNIK BIOLOGICZNYCH OCZYSZCZALNI ŚCIEKÓW

9. Dynamiczne generowanie grafiki, cz. 3

Kancelaris - Zmiany w wersji 2.50

Wtedy wystarczy wybrać właściwego Taga z listy.

SZABLONY KOMUNIKATÓW SPIS TREŚCI

K P K P R K P R D K P R D W

Microsoft Management Console

Systemy mikroprocesorowe - projekt

Informacje o omawianym programie. Założenia programu omawianego w przykładzie

GRAFIKA PROGRAMOWANA W PASCALU ==================================

Zadanie 3 - (7 punktów) Iloczyn składników Jeśli zapis liczby 22 w postaci sumy zawiera składnik 1, lepiej pogrupować go z innym składnikiem

HiTiN Sp. z o. o. Przekaźnik kontroli temperatury RTT 4/2 DTR Katowice, ul. Szopienicka 62 C tel/fax.: + 48 (32)

Moduł Pulpit opcji oraz Narzędzia. Opis v 1.0

Kurs z matematyki - zadania

INSTRUKCJA Panel administracyjny

W. Guzicki Zadanie 23 z Informatora Maturalnego poziom rozszerzony 1

Grupa bezpieczeństwa kotła KSG / KSG mini

Type ETO2 Controller for ice and snow melting

WYŻSZA SZKOŁA INFORMATYKI I ZARZĄDZANIA Z SIEDZIBĄ W RZESZOWIE. Projekt z przedmiotu: Języki asemblerowe. Temat:

PRAWA ZACHOWANIA. Podstawowe terminy. Cia a tworz ce uk ad mechaniczny oddzia ywuj mi dzy sob i z cia ami nie nale cymi do uk adu za pomoc

EGZAMIN MAGISTERSKI, 24 czerwca 2013 Matematyka w ekonomii i ubezpieczeniach

7. OPRACOWYWANIE DANYCH I PROWADZENIE OBLICZEŃ powtórka

dbsamples.udl lub przygotowany wcześniej plik dla Excela) i OK,

Surowiec Zużycie surowca Zapas A B C D S 1 0,5 0,4 0,4 0, S 2 0,4 0,2 0 0, Ceny x

Skitch for Android Instrukcja obsługi 2012 Evernote Corporation Wszelkie prawa zastrzeżone Opublikowano: Jun 19, 2012

PLANIMETRIA. Poziom podstawowy

Programowanie obiektowe

SPECYFIKACJA TECHNICZNA D GEODEZYJNA OBSŁUGA BUDOWY

PROGRAM ZAPEWNIENIA I POPRAWY JAKOŚCI AUDYTU WEWNĘTRZNEGO

Ramki tekstowe w programie Scribus

Praca na wielu bazach danych część 2. (Wersja 8.1)

Kategorie inwestycyjne poprowadzenia ruchu rowerowego

Procedura działania Punktu Potwierdzającego Profile Zaufane epuap w Urzędzie Miejskim w Barcinie

Kalkulator Kalorii by CTI. Instrukcja

INSTRUKCJA UŻYTKOWANIA. Projekt: Syrena. wersja: Program: Krzysztof Gosławski Kontakt:

Użytkowanie elektronicznego dziennika UONET PLUS.

Badanie bezszczotkowego silnika prądu stałego z magnesami trwałymi (BLDCM)

Transkrypt:

Podstawy apletów Co to jest aplet, cykl życia apletu, metody apletu, metoda paint(), czcionki, kolory, parametryzowanie apletu, układ współrzędnych ekranowych, klasa Graphics i jej metody. 1

Co to jest aplet? Aplet to obiekt Javy - wyposażony w graficzny interfejs i osadzony w dokumencie HTML. Klasy składające się na aplet są dynamicznie ładowane poprzez sieć i uruchamiane lokalnie przez przeglądarkę. Aplety w odróżnieniu od aplikacji nie posiadają metody main(). Główna klasa każdego apletu musi być klasą publiczną, dziedziczyć z predefiniowanej klasy java.applet.applet, a jej nazwa musi być taka jak nazwa pliku, w którym się znajduje. Poprzez dziedziczenie aplet uzyskuje szereg metod, które są zdefiniowane w klasie nadrzędnej, a w szczególności: możliwość komunikowania się z przeglądarką, zdolność do obsługi graficznego interfejsu użytkownika. 2

Cykl życia apletu W odróżnieniu od aplikacji aplet nie zaczyna działania od metody main(). Cykl życia apletu wyznaczają cztery metody zdefiniowane w klasie Applet: init(), start(), stop() i destroy(). Metody apletu są zdefiniowane jako puste: public void init() Domyślnie metody te po prostu nic nie robią i jeśli nie są używane, to nie trzeba ich przedefiniowywać. 3

Metody apletu Metoda init() Wykonywanie apletu zaczyna się od metody init(). Metoda ta powinna być wywoływana tylko raz w ciągu całego życia apletu, zaraz po załadowaniu strony z apletem. Umieszcza się w niej kod potrzebny do zainicjowania apletu, np. nadający zmiennym wartości początkowe, związany z ustawieniem czcionek, kolorów, koloru tła ekranu, itp. Metoda start() Metoda ta jest wywoływana zaraz po powrocie z metody init(). Używa się jej do uruchamiania wątków, animacji, wysyłania odpowiednich komunikatów do obiektów pomocniczych lub odtwarzania dźwięków związanych z załadowaniem apletu. Metoda ta może być wielokrotnie wywoływana podczas cyklu życia apletu, na przykład przy każdym powrocie na stronę z apletem, gdy staje się ona stroną bieżącą w przeglądarce. Zwykle jeśli wyposażymy aplet w metodę start() powinniśmy go wyposażyć również w metodę stop. 4

5 Metody apletu Metoda stop() Metody tej zwykle używa się do zatrzymania wątków oraz do przeprowadzenia czynności porządkowych. Metoda stop() jest wywoływana, gdy okno przeglądarki, w której znajduje się aplet, jest minimalizowane do ikony, zasłaniane przez inne okno, lub gdy otwierana jest w nim nowa strona WWW. Metoda destroy() Metoda destroy() jest wywoływana, gdy aplet kończy swoje działanie tuż przed usunięciem apletu z pamięci. Jest ona rzadko używana, ponieważ Java posiada mechanizm automatycznego zwalniania nieużywanych zasobów pamięci. Poprzez przedefiniowanie (override) metody destroy() można zrealizować zatrzymanie dowolnego wątku lub usunięcie obiektów utworzonych przez aplet.

Metoda paint() Metoda paint() jest zdefiniowana w java.awt.component, która jest klasą nadrzędną dla klasy java.awt.applet. Metoda ta służy do wyświetlania tekstu i grafiki na aplecie. public void paint(graphics g) g.drawstring("hello World", 20, 20); Jedynym parametrem metody paint() jest referencja do obiektu klasy Graphics, który reprezentuje tzw. graficzny kontekst urządzenia (Graphics Device Context). Graficzny kontekst jest swoistym urządzeniem wyjściowym apletu, tworzonym przez przeglądarkę. Jest on przekazywany do metody paint() wtedy, gdy zachodzi potrzeba pisania lub rysowania na wyjściu apletu (ekran, bufor pamięci). 6

Czcionki Pismo jest obiektem klasy Font, której konstruktor wymaga podania trzech parametrów: nazwy kroju pisma, stylu i rozmiaru czcionki, np. public void paint(graphics gdc) Font font = new Font("Helvetica", Font.PLAIN, 16); gdc.setfont(font); gdc.drawstring("hello", 20, 20); Standardowe czcionki: Helvetica Courier Dialog - domyślna DialogInput TimesRoman ZapfDingBats Styl czcionek: Font.BOLD Font.PLAIN Font.ITALIC Rozmiar: 9-48 punktów 7

Kolory Kolor jest obiektem klasy Color. Instrukcja tworzenia koloru ma postać: Color nazwa_koloru = new (r, g, b); Parametry r, g, b są liczbami całkowitymi z zakresu 0..255 i reprezentują składowe RGB (R-red, G-green, B-blue) definiowanego koloru (teoretycznie można otrzymać w ten sposób 24 miliony kolorów). public void paint(graphics gdc) Color c = new Color(128, 20,80); gdc.setcolor(c); gdc.drawstring("hello", 20, 20); Do ustawienia koloru można też użyć następującej konstrukcji: gdc.setcolor(new Color(128, 20,80)); 8

Predefiniowane kolory Klasa Color zawiera kilkanaście standardowych wartości kolorów. Są one zdefiniowane jako stałe klasowe static final Color - zatem można je używać bez tworzenia obiektów klasy Color. Poniższy fragment kodu ustawia kolor tła na pomarańczowy oraz kolor pisma na purpurowy: public void paint(graphics gdc) setbackground(color.orange); gdc.setcolor(color.magenta); gdc.drawstring("hello", 20, 20); black blue cyan darkgray gray green lightgray magenta orange pink red white yellow 9

Parametryzowanie apletu Poprzez sparametryzowanie apletu można zmieniać jego wygląd i sposób działania już na poziomie HTML. Parametry można przekazywać ze strony HTML do apletu za pomocą specjalnych znaczników <PARAM> umieszczonych wewnątrz znacznika <APPLET>. <applet code="napis.class" width="200" height="200"> <param name="text" value="hello World"> <param name="size" value="24"> </applet> Do odczytu parametru służy metoda getparameter() String napis = getparameter("text"); if ( napis == null ) napis = "Hello"; Metoda getparameter() zawsze zwraca String. Jeśli jest to liczba, należy dokonać odpowiedniej konwersji. W przypadku, kiedy parametr nie jest określony w pliku HTML, przyjmowana jest wartość domyślna. 10

11 Układ współrzędnych ekranowych Obszar apletu można postrzegać jako macierz pikseli, z których każdy może wyświetlać jeden lub więcej kolorów. Początek układu współrzędnych ekranowych (0,0) znajduje się w lewym górnym rogu okna apletu. Zwiększanie wartości współrzędnych następuje w miarę przesuwania się w prawo i w dół. Maksymalne wartości współrzędnych wynoszą: int mx = getsize().width; int my = getsize().height;

Klasa Graphics Klasa Graphics z pakietu java.awt - jest klasą bazową dla wszystkich graficznych kontekstów urządzenia. Jej metody umożliwiają: uzyskiwanie i ustalanie własności kontekstu graficznego wypisywanie tekstów, rysowanie linii, prostokątów, owali, łuków i wielokątów, wyświetlanie obrazów - obiektów klasy Image. public void paint(graphics g) g.setfont(new Font("Courier", Font.PLAIN, 24)); g.setcolor(color.red); g.drawstring("hello", 20, 20); 12

Metody klasy Graphics Metoda Opis drawline(int x1, int y1, int x2, int y2 ) Linia prosta: (x1, y1) punkt początkowy, (x2, y2) - końcowy drawrect (int x, int y, int w, int h ) Prostokąt: x, y - współrzędne lewego górnego rogu prostokąta; w, h - szerokość i wysokość fillrect (int x, int y, int w, int h ) Prostokąt wypełniony bieżącym kolorem. drawoval(int x, int y, int w, int h ) Owal (wewnątrz prostokąta) drawoval(int x, int y, int w, int h draw3drect(int x, int y, int w, int h, boolean b ) fill3drect(int x, int y, int w, int h, boolean b ) Owal wypełniony kolorem. Prostokąt trójwymiarowy - wypukły, gdy b=true. Prostokąt trójwymiarowy wypełniony kolorem. 13

14 Metody klasy Graphics Metoda drawarc(int x, int y, int w, int h, int alfa, int beta) Opis Łuk pokrywający określony prostokąt; alfa kąt określający początek łuku, beta rozmiar kąta. fillarc(int x, int y, int w, int h, int alfa, int beta) drawpolygon(int[] x, int[] y, int n) fillpolygon(int[] x, int[] y, int n) drawpolyline(int x[], int y[], int n) Łuk wypełniony bieżącym kolorem. Wielokąt: tablice punktów x i y określają współrzędne kolejnych wierzchołków wielokąta, n - to liczba punktów. Wielokąt wypełniony kolorem. Linia łamana - otwarta

Prezentacja kształtów public void paint(graphics g) g.setcolor(color.blue); g.fillrect(10, 10, 180, 140); g.setcolor(color.orange); g.fill3drect(160, 50, 120, 130, true); g.drawoval(20, 130, 140, 160); g.fillroundrect(100, 220, 190, 70, 40, 90); g.fillarc(30, 40, 50, 320, 0, 180); g.fillarc(100, 170, 40, 40, 10, 340); int[] x = 200,250, 290; int[] y = 10,90, 30; g.fillpolygon(x, y, 3); int[] a = 100,50, 150; int[] b = 80,20, 50; g.drawpolyline(a, b, 3); 15

16 Przykład - serwetka Korzystając z metody drawline() można tworzyć w prosty sposób ciekawą grafikę. Wystarczy odpowiednio dobrać wzory określające współrzędne punktów końcowych rysowanych linii. Cykliczną zmianę kolorów kolejnych linii można uzyskać, pisząc: if (i%3==1) gdc.setcolor(color.red); else if (i%3==2) else gdc.setcolor(color.green); gdc.setcolor(color.blue);

Kod źródłowy serwetki public void paint(graphics gdc) int x1,y1,x2,y2; int xs = getsize().width / 2; int ys = getsize().height / 2; for (int i=0; i<400; i++) x1=(int)( xs*math.sin(i/40.0)*math.cos(i/40.0)); y1=(int)( xs*math.cos(i/40.0)); x2=(int)(-2*xs*math.sin(i/40.0)*math.cos(i/40.0)); y2=(int)(-xs/400*math.cos(i/40.0)); gdc.drawline(x1+xs, y1+ys, x2+xs, y2+ys); 17

18 Przykład - dywan Tworzenie dywanów ma charakter eksperymentalny. Tajemnica uzyskania ciekawego wzoru tkwi w dobraniu postaci funkcji, która wylicza kolor na podstawie współrzędnych rysowanego punktu. Algorytm rysowania dywanu korzysta z dwóch pętli. Zewnętrzna pętla wyznacza wartości kolejnych współrzędnych poziomych; dla każdej z nich pętla wewnętrzna rysuje od góry do dołu kolejne punkty. Kolor punktu jest obliczany za pomocą funkcji, których argumentami są wyrażenia zależne od położenia punktu.

19 Kod źródłowy dywanu public void paint(graphics gdc) int mx = getsize().width, my = getsize().height; int r, g, b; for ( i=5; i < mx-5; i++)

Przykład interferencja fal Sumowanie fal o zbliżonych amplitudach i o zbliżonych długościach pozwala uzyskać charakterystyczny rysunek tzw. dudnień. import java.awt.*; import java.applet.*; public class Drgania extends Applet int width, height; // rozmiary apletu public void init() width = getsize().width; height=getsize().height; setsize(width, height); setbackground(color.orange); 20

interferencja fal public void paint(graphics g) int x, xp, yp, y, ys, y1, y2; double A = (double) height/3; double f =36; ys = height/2; double T1 = 1.14*width, T2 = width; xp = 0; yp = ys; g.setcolor(color.blue); for (x=0; x<=width; x++) y1=ys-(int)(a*math.sin(f*math.pi/t1*x)); y2=ys-(int)(a*math.sin(f*math.pi/t2*x)); y =(y1+y2)/2; g.drawline(xp, yp, x, y); xp = x; yp = y; 21

22 Zadanie 1 Wykonaj aplet rysujący trójkąt wypełniony szarym kolorem. Trójkąt powinien stopniowo rozjaśniać się aż do osiągnięcia koloru białego. 1. W kolorze szarym składowe r, g, b mają taką samą wartość: r=80, g=80 i b=80. 2. Aby efekt był zauważalny, należy spowolnić działanie apletu, np. pisząc pętlę opóźniającą ;

import java.awt.*; import java.applet.*; Rozwiązanie public class Trojkat extends Applet public void paint(graphics g) int x[] = 60, 130, 220; int y[] = 240,50,200; for (int i=80; i<256; i++) g.setcolor(new Color(i, i, i)); g.fillpolygon(x, y, 3); for (int j=0; j<1e6; j++); 23

Zadanie 2 Zadaniem naszym będzie wykonanie apletu tworzącego trójkąt Sierpińskiego. Trójkąt Sierpińskiego powstaje jako zbiór punktów generowanych w wyniku błądzenia przypadkowego wewnątrz trójkąta. Algorytm postępowania jest prosty. Błądzenie rozpoczynamy w dowolnym punkcie P 1 wewnątrz trójkąta. Jest to tzw. punkt wiodący. W każdym kolejnym ruchu losujemy jeden z wierzchołków trójkąta i w środku odcinka łączącego ten wierzchołek z punktem wiodącym umieszczamy nowy punkt wiodący. 24

Rozwiązanie public void paint(graphics g) int[]x = 5, 150, 295; int[]y = 230, 7, 230; int w; int a = (int)(5+math.random()*290); //P1 int b = (int)(7+math.random()*223); for (double k=0; k<1e5; k++) w = (int)(math.random()*3); a = (a+x[w])/2; b = (b+y[w])/2; g.drawline(a, b, a, b); 25

26 Zadanie 3 Wykonaj aplet rysujący wielokąt foremny o n wierzchołkach, wpisany w okrąg o promieniu r i środku S(xs, ys). Wierzchołki wielokąta foremnego są równomiernie rozłożone na okręgu, a ich współrzędne spełniają następujące równania parametryczne: x = xs + rcos, y = ys + rsin gdzie oznacza kąt łączący

Rozwiązanie public void paint(graphics g) int r=100; int n=8; int xs = 150, ys = 150; int xp=xs+r, yp=ys; double alfa = (double) 2*Math.PI/n; int x, y; for (int i=1; i<=n; ++i) x = xs + (int)(r*math.cos(i*alfa)); y = ys - (int)(r*math.sin(i*alfa)); g.drawline(xp, yp, x, y); xp = x; yp = y; 27

Modyfikacja 1 Zmodyfikuj poprzedni aplet tak, aby uzyskać prostą animację: losowana jest liczba wierzchołków n (n>=3), a następnie aplet jest odświeżany. 1. Instrukcja generująca liczbę n może mieć postać: int n = 3 + (int) (12*Math.random()); 2. Do odrysowania apletu używa się metody repaint(). Ma ona kilka konstruktorów. Najczęściej jest używana jako metoda bezparametrowa. Może też pobierać czas (w ms), po którym aplet ma być odświeżony - np. repaint (500). Można również określić wymiary prostokąta, który ma zostać odświeżony - np. repaint(50, 50, 150, 150). 28

Rozwiązanie public void paint(graphics g) int x, y, r=100; int n=3+(int)(12*math.random()); int xs = 150, ys = 150; int xp=xs+r, yp=ys; double alfa = (double) 2*Math.PI/n; for (int i=1; i<=n; ++i) x = xs + (int)(r*math.cos(i*alfa)); y = ys - (int)(r*math.sin(i*alfa)); g.drawline(xp, yp, x, y); xp = x; yp = y; repaint(500); 29

30 Modyfikacja 2 Zmodyfikuj poprzedni aplet tak, aby oprócz wielokąta rysowane były jego przekątne. 1. Utwórz dwuwymiarową tablicę, w której zapamiętywane będą wierzchołki wielokąta - np. int[][] W = new int[max][2]; gdzie MAX - maksymalna liczba wierzchołków 2. W pętli od k=0 do k= n-1 wypełnij tablicę wierzchołków W[k][0] = xs+(int)(r*math.cos(k*alfa)); W[k][1] = ys-(int)(r*math.sin(k*alfa));

Rozwiązanie - metoda paint() final int MAX=50; //maks. liczba wierzch. int[][] W = new int[max][2]; int r=100, n=3+(int)(12*math.random()); int xs = 150, ys = 150; double alfa = (double) 2*Math.PI/n; for (int k=0; k<=n; ++k) W[k][0] = xs + (int)(r*math.cos(k*alfa)); W[k][1] = ys - (int)(r*math.sin(k*alfa)); for (int i=0; i<n; ++i) for (int j=i+1; j<n; ++j) g.drawline(w[i][0],w[i][1],w[j][0],w[j][1]); repaint(500); 31

Modyfikacja 3 Wprowadź do apletu kolory - kontur wielokąta ma być rysowany kolorem czerwonym, zaś jego przekątne kolorem niebieskim. Wystarczy przed rysowaniem linii umieścić instrukcję if ((j-i==1) (i==0)&&(j==n-1)) g.setcolor(color.red); else g.setcolor(color.blue); 32