public class Častica extends Object implements Poloha, Smer, Rozmer
Toto je pomocná trieda určená na tvorbu časticových simulácií.
Implementuje dve základné rozhrania Poloha
a Smer
, čiže táto trieda obsahuje iba metódy na zistenie
polohy a smeru častice, ostatnú funkcionalitu je potrebné
doprogramovať.
Výhodou takejto implementácie je jej odľahčenosť a široké možnosti použitia. Častica rezervuje omnoho menej prostriedkov ako robot, ale dá sa použiť na mnohých miestach v programovacom rámci GRobot namiesto robota alebo iného objektu implementujúceho rozhranie polohy alebo smeru.
Príklad:
Tento príklad ukazuje využitie triedy Častica
pri
implementácii simulácie ohňostroja.
import
knižnica.*;public
class
Ohňostrojextends
GRobot
{// Vnorená súkromná trieda reprezentujúca raketu ohňostroja. Je
// odvodená od triedy Častica a rozširuje ju len mierne. Definuje
// novú metódu (reakciu) aktivita, ktorá sa stará o fungovanie aktívnej
// rakety (spúšťa rovnomennú reakciu aktívnych čiastočiek – pozri
// nižšie).
private
class
Raketaextends
Častica
{// Ďalšia vnorená tried (druhá úroveň), ktorá reprezentuje čiastočku
// vybuchnutej rakety. Tiež je odvodená od triedy Častica, no
// rozširuje ju o málo viac než trieda Raketa. Čiastočka totiž musí
// mať okrem aktivity definovanú ešte rýchlosť a zrýchlenie
// (vlastnosti, ktoré má robot definované predvolene, ale použitie
// robota by nebolo efektívne – bolo by to ako použiť Ferrari na
// jazdu do obchodu, ktorý je krížom cez ulicu). Metóda reset slúži
// na opätovné nastavenie počiatočných hodnôt vlastností čiastočky.
private
class
Čiastočkaextends
Častica
{// Atribút rýchlosti posunu v smere osi x.
public
double
vx =0
;// Atribút rýchlosti posunu v smere osi y.
public
double
vy =0
;// Atribút zrýchlenia posunu v smere osi x.
public
double
ax =0
;// Atribút zrýchlenia posunu v smere osi y.
public
double
ay =0
;// Atribút životnosti čiastočky v tikoch.
public
int
život =0
;// Definovanie vlastnej reakcie na časovač – má za úlohu
// zabezpečiť činnosť aktívnych čiastočiek a tiež postupné
// ubúdanie života čiastočky.
public
void
aktivita() {if
(život >0
) {x
+= vx;y
+= vy; vx += ax; vy += ay; --život; } }// Táto metóda slúži na nastavenie počiatočných hodnôt
// vlastností čiastočky.
public
void
reset() {// Nastavenie súradníc podľa nadradenej triedy rakety:
x
= Raketa.this
.x
;y
= Raketa.this
.y
;// Voľba nových parametrov (využíva sa aktuálna inštancia
// najvyššej hierarchicky, nie dedične, nadradenej triedy):
Ohňostroj.this
.domov
(); Ohňostroj.this
.náhodnýSmer
();double
a =Svet
.náhodnéReálneČíslo
(-0.25
, -0.8
);double
v =Svet
.náhodnéReálneČíslo
(8
,10
);// Nastavenie nového zrýchlenia:
Ohňostroj.this
.dopredu
(a); ax = Ohňostroj.this
.polohaX
(); ay = Ohňostroj.this
.polohaY
();// Nastavenie novej (počiatočnej) rýchlosti:
Ohňostroj.this
.dopredu
(v - a); vx = Ohňostroj.this
.polohaX
(); vy = Ohňostroj.this
.polohaY
();// Gravitácia:
ay -=0.1
;// Náhodná dĺžka života:
život = (int
)Svet
.náhodnéCeléČíslo
(8
,16
); } }// Vnútorný zoznam čiastočiek každej rakety. (V konštruktore nižšie
// je určené, že každá raketa bude obsahovať presne 50 čiastočiek.)
private
final
Zoznam
<Čiastočka> čiastočky =new
Zoznam
<Čiastočka>();// Konštruktor rakety.
public
Raketa() {// Vytvorenie 50 čiastočiek:
for
(int
i =0
; i <50
; ++i) čiastočky.pridaj(new
Čiastočka()); }// Táto metóda sa stará o „štart“ rakety. V tejto implementácii je to
// iba odpálenie rakety na náhodnej pozícii (raketa nevyletuje).
public
void
štart() {náhodnáPoloha
();for
(Čiastočka čiastočka : čiastočky) čiastočka.reset(); }// Definovanie vlastnej reakcie na časovač – má za úlohu
// zabezpečiť činnosť a kreslenie aktívnych rakiet.
public
void
aktivita() {for
(Čiastočka čiastočka : čiastočky)if
(čiastočka.život >0
) { čiastočka.aktivita();skočNa
(čiastočka);krúžok
(); } } }// Vnútorný zoznam rakiet ohňostroja. (V konštruktore je ich vytvorených
// desať.)
private
final
Zoznam
<Raketa> rakety =new
Zoznam
<Raketa>();// Konštruktor ohňostroja.
private
Ohňostroj() {// Nastavenie parametrov jedinej inštancie robota, ktorá bude použitá
// na kreslenie čiastočiek rakiet:
zdvihniPero
();veľkosť
(3
);skry
();// Pridanie desiatich rakiet do vnútorného zoznamu:
for
(int
i =0
; i <10
; ++i) rakety.pridaj
(new
Raketa());// Spustenie časovača (inak by ohňostroj nefungoval):
Svet
.spustiČasovač
(); }// Po každom kliknutí sa odpáli ďalšia raketa (po odpálení poslednej
// sa pokračuje opäť prvou).
@
Overridepublic
void
klik
() { rakety.ďalší
().štart(); }// Pri každom tiku sa prekreslí obrazovka a zabezpečí sa fungovanie
// aktívnych rakiet.
@
Overridepublic
void
tik
() {Svet
.vymažGrafiku
();for
(Raketa raketa : rakety) raketa.aktivita(); }// Hlavná metóda.
public
static
void
main(String
... args) {Svet
.použiKonfiguráciu
("ohnostroj.cfg"
);new
Ohňostroj(); } }
Výsledok:
Ukážka
náhodného výsledku po niekoľkých klikoch.
Ďalší príklad, ktorý používa triedu Častica
je v opise
metódy vnorMennýPriestorVlastností
Modifikátor a typ | Atribút a opis |
---|---|
double |
h
Atribút výšky častice.
|
double |
uhol
Atribút smeru častice.
|
double |
w
Atribút šírky častice.
|
double |
x
Atribút súradnice x polohy častice.
|
double |
y
Atribút súradnice y polohy častice.
|
juh, JUH, juhovychod, JUHOVYCHOD, juhovýchod, JUHOVÝCHOD, juhozapad, JUHOZAPAD, juhozápad, JUHOZÁPAD, sever, SEVER, severovychod, SEVEROVYCHOD, severovýchod, SEVEROVÝCHOD, severozapad, SEVEROZAPAD, severozápad, SEVEROZÁPAD, vychod, VYCHOD, východ, VÝCHOD, zapad, ZAPAD, západ, ZÁPAD
Konštruktor a opis |
---|
Častica() |
Modifikátor a typ | Metóda a opis |
---|---|
void |
aktivita()
Táto metóda je predvolene prázdna.
|
boolean |
jeNa(double x,
double y)
Overí, či sa poloha tejto častice dokonale zhoduje so zadanými
súradnicami.
|
boolean |
jeNa(Poloha poloha)
Overí, či sa poloha tejto častice a poloha zadaného objektu dokonale
zhodujú.
|
boolean |
maRozmer(double šírka,
double výška)
Alias pre
máRozmer . |
boolean |
máRozmer(double šírka,
double výška)
Overí, či sa rozmery častice dokonale zhodujú so zadanými
rozmermi.
|
boolean |
maRozmer(Rozmer rozmer)
Alias pre
máRozmer . |
boolean |
máRozmer(Rozmer rozmer)
Overí, či sa rozmery častice a rozmery zadaného objektu
dokonale zhodujú.
|
boolean |
maSirku(double šírka)
Alias pre
máŠírku . |
boolean |
máŠírku(double šírka)
Zistí, či má častica zadanú šírku.
|
boolean |
maVysku(double výška)
Alias pre
máVýšku . |
boolean |
máVýšku(double výška)
Zistí, či má častica zadanú výšku.
|
void |
náhodnáPoloha()
Vygeneruje pre časticu náhodné súradnice x a y, ktoré budú
v rozsahu hraničných hodnôt plochy plátien sveta grafického
robota.
|
void |
náhodnýSmer()
Vygeneruje pre časticu náhodnú hodnotu smeru.
|
void |
pasivita()
Táto metóda je predvolene prázdna.
|
Bod |
poloha()
|
void |
poloha(double novéX,
double novéY)
|
void |
poloha(Poloha bod)
|
double |
polohaX()
|
double |
polohaY()
|
Rozmery |
rozmery()
Zistí aktuálne rozmery častice.
|
void |
rozmery(double šírka,
double výška)
Nastaví nové rozmery častice.
|
void |
rozmery(Rozmer rozmer)
Nastaví nové rozmery častice podľa zadanej implementácie
rozmeru.
|
double |
sirka()
Alias pre
šírka . |
void |
sirka(double šírka)
Alias pre
šírka . |
double |
smer()
|
void |
smer(double uhol)
|
void |
smer(Smer objekt)
|
double |
suradnicaX()
Alias pre
súradnicaX . |
double |
súradnicaX()
|
double |
suradnicaY()
Alias pre
súradnicaY . |
double |
súradnicaY()
|
double |
šírka()
|
void |
šírka(double šírka)
|
double |
uhol()
|
void |
uhol(double uhol)
|
void |
uhol(Smer objekt)
|
double |
vyska()
Alias pre
výška . |
void |
vyska(double výška)
Alias pre
výška . |
double |
výška()
|
void |
výška(double výška)
|
public double x
Atribút súradnice x polohy častice.
public double y
Atribút súradnice y polohy častice.
public double uhol
Atribút smeru častice.
public double w
Atribút šírky častice. (Anglicky: width.)
public double h
Atribút výšky častice. (Anglicky: height.)
public double polohaX()
Metóda vráti súradnicu x polohy častice.
Metóda je povinnou súčasťou implementácie rozhrania Poloha
, inak je prístup k atribútom x
, y
verejný.
public double polohaY()
Metóda vráti súradnicu y polohy častice.
Metóda je povinnou súčasťou implementácie rozhrania Poloha
, inak je prístup k atribútom x
, y
verejný.
public double súradnicaX()
Metóda vráti súradnicu x polohy častice.
Metóda je povinnou súčasťou implementácie rozhrania Poloha
, inak je prístup k atribútom x
, y
verejný.
súradnicaX
v rozhraní Poloha
public double suradnicaX()
Alias pre súradnicaX
.
suradnicaX
v rozhraní Poloha
public double súradnicaY()
Metóda vráti súradnicu y polohy častice.
Metóda je povinnou súčasťou implementácie rozhrania Poloha
, inak je prístup k atribútom x
, y
verejný.
súradnicaY
v rozhraní Poloha
public double suradnicaY()
Alias pre súradnicaY
.
suradnicaY
v rozhraní Poloha
public Bod poloha()
Metóda vráti objekt spájajúce obidve
súradnice polohy častice.
Metóda je povinnou súčasťou implementácie rozhrania Poloha
, inak je prístup k atribútom x
, y
verejný.
public void poloha(Poloha bod)
bod
– bod určujúci novú polohu časticepublic void poloha(double novéX, double novéY)
novéX
– nová x-ová súradnica časticenovéY
– nová y-ová súradnica časticepublic boolean jeNa(double x, double y)
Overí, či sa poloha tejto častice dokonale zhoduje so zadanými
súradnicami. Ak je zistená zhoda, tak metóda vráti hodnotu true
, v opačnom prípade hodnotu false
.
public boolean jeNa(Poloha poloha)
Overí, či sa poloha tejto častice a poloha zadaného objektu dokonale
zhodujú. Ak je zistená zhoda, tak metóda vráti hodnotu true
,
v opačnom prípade hodnotu false
.
public double uhol()
Metóda vráti smer častice.
Metóda je povinnou súčasťou implementácie rozhrania Smer
, inak je prístup k atribútu uhol
verejný.
public double smer()
Metóda vráti smer častice.
Metóda je povinnou súčasťou implementácie rozhrania Smer
, inak je prístup k atribútu uhol
verejný.
public void uhol(double uhol)
uhol
– hodnota určujúca nový uhol časticepublic void smer(double uhol)
uhol
– hodnota určujúca nový uhol časticepublic void uhol(Smer objekt)
uhol
– objekt určujúci nový uhol časticepublic void smer(Smer objekt)
uhol
– objekt určujúci nový uhol časticepublic double šírka()
Vráti aktuálnu šírku častice.
Metóda je povinnou súčasťou implementácie rozhrania Rozmer
, inak je prístup k atribútom w
, h
verejný.
public double výška()
Vráti aktuálnu výšku častice.
Metóda je povinnou súčasťou implementácie rozhrania Rozmer
, inak je prístup k atribútom w
, h
verejný.
public void šírka(double šírka)
Nastaví novú šírku častice.
Metóda je povinnou súčasťou implementácie rozhrania Rozmer
, inak je prístup k atribútom w
, h
verejný.
public void výška(double výška)
Nastaví novú výšku častice.
Metóda je povinnou súčasťou implementácie rozhrania Rozmer
, inak je prístup k atribútom w
, h
verejný.
public Rozmery rozmery()
Zistí aktuálne rozmery častice.
public void rozmery(double šírka, double výška)
Nastaví nové rozmery častice.
Metóda je povinnou súčasťou implementácie rozhrania Rozmer
, inak je prístup k atribútom w
, h
verejný.
šírka
– nová šírka časticevýška
– nová výška časticepublic void rozmery(Rozmer rozmer)
Nastaví nové rozmery častice podľa zadanej implementácie rozmeru.
public boolean máŠírku(double šírka)
Zistí, či má častica zadanú šírku.
public boolean maSirku(double šírka)
Alias pre máŠírku
.
public boolean máVýšku(double výška)
Zistí, či má častica zadanú výšku.
public boolean maVysku(double výška)
Alias pre máVýšku
.
public boolean máRozmer(Rozmer rozmer)
Overí, či sa rozmery častice a rozmery zadaného objektu
dokonale zhodujú. Ak je zistená zhoda, tak je výsledkom
true
, v opačnom prípade hodnota false
.
public boolean máRozmer(double šírka, double výška)
Overí, či sa rozmery častice dokonale zhodujú so zadanými
rozmermi. Ak je zistená zhoda, tak je výsledkom
true
, v opačnom prípade hodnota false
.
public boolean maRozmer(double šírka, double výška)
Alias pre máRozmer
.
public void náhodnáPoloha()
Vygeneruje pre časticu náhodné súradnice x a y, ktoré budú v rozsahu hraničných hodnôt plochy plátien sveta grafického robota.
public void náhodnýSmer()
Vygeneruje pre časticu náhodnú hodnotu smeru.
public void aktivita()
Táto metóda je predvolene prázdna. Je určená na prekrytie v triedach odvodených od častice. Častica môže byť chápaná ako odľahčená verzia robota. O celú jej funkčnosť (vrátane aktivity alebo pasivity) sa musí postarať programátor, ktorý sa ju rozhodne rozšíriť a využiť na svoje účely. Aktivita (rovnako ako pasivita) častice nie je v programovacom rámci GRobot nikde vnútorne použitá, ale jej definícia v tejto triede poskytuje spoločný bod použitia všetkých odvodených tried.
public void pasivita()
Táto metóda je predvolene prázdna. Je určená na prekrytie v triedach odvodených od častice. Častica môže byť chápaná ako odľahčená verzia robota. O celú jej funkčnosť (vrátane aktivity alebo pasivity) sa musí postarať programátor, ktorý sa ju rozhodne rozšíriť a využiť na svoje účely. Pasivita (rovnako ako aktivita) častice nie je v programovacom rámci GRobot nikde vnútorne použitá, ale jej definícia v tejto triede poskytuje spoločný bod použitia všetkých odvodených tried.