public class Rad extends Object
Trieda Rad
umožňuje vytvárať inštancie generujúce pílové
číselné postupnosti. To znamená, že každá inštancia tejto triedy generuje
periodický stúpajúco-klesajúci číselný rad podľa zadaných hraníc
a kroku.
Ukážky pílových
číselných postupností.
Metóda daj
generuje rad algoritmicky (pomocou
niekoľkých súkromných stavových premenných). Zjednodušene (s jednotkovým
krokom a bez korekcií hodnôt) je postup generovania takýto:
Ak je smer vzostupný, tak
zvýš hodnotu;
ak hodnota dosiahne vrchnú hranicu, tak
obráť smer;
inak
zníž hodnotu;
ak hodnota dosiahne spodnú hranicu, tak
obráť smer.
Naproti tomu, metóda dajHodnotu
, ktorá
vyžaduje zadanie číselného parametra počíta členy radu aritmeticky.
Aritmetické riešenie generovania číselného radu (na zjednodušenie
s jednotkovým krokom) vyzerá takto:
Výpočet ľubovoľného člena radu podľa parametra pa:
vh − |(pa mod (2 × (vh − sh))) − (vh − sh)|
Kde:
sh – spodná hranica,
vh – vrchná hranica,
pa – parameter („fáza“ výpočtu radu),
mod – operátor zvyšku po delení (v Jave symbol %
),
|…| – absolútna hodnota.
Po zjednodušení s použitím pomocných premenných:
vh − |(pa mod de) − rh|
Kde:
rh – rozdiel hraníc: vh − sh,
de – deliteľ: 2 × rh.
Príklad:
Tento jednoduchý príklad používa dva rady na plynulé nastavovanie horizontálnej a vertikálnej rýchlosti robota.
import
knižnica.*;public
class
PríkladPoužitiaRaduextends
GRobot {private
Rad
x =new
Rad
(-2000
,1000
,20
);private
Rad
y =new
Rad
(-1000
,2000
,30
);private
PríkladPoužitiaRadu() {super
(400
,400
);ohranič
();aktivuj
(); }@
Overridepublic
void
aktivita
() {rýchlosťPosunu
(x.daj
() /1000.0
);rýchlosť
(y.daj
() /1000.0
); }public
static
void
main(String
[] args) {new
PríkladPoužitiaRadu();Svet
.zbaľ
(); } }
Ukážka niekoľkých prvých sekúnd kreslenia príkladu použitia
radu.
Úpravou parametrov konštruktorov radov x
a y
:
private
Rad
x =new
Rad(-1800
,800
,20
);private
Rad
y =new
Rad(-1100
,1400
,30
);
a prípadne aj deliteľov rýchlostí robota:
rýchlosťPosunu
(x.daj
() /800.0
);rýchlosť
(y.daj
() /800.0
);
môžeme dosiahnuť zaujímavé výsledky:
Ukážka kreslenia príkladu použitia radu
po úpravách.
Samozrejme, že tu sa možnosti použitia generátora radu nekončia. Použiť sa dá všade, kde je výhodné využívať cyklickú postupnosť, napríklad na priame určovanie polohy pendlujúceho nepriateľa a podobne.
Konštruktor a opis |
---|
Rad()
Predvolený konštruktor.
|
Rad(int spodnáHranica,
int vrchnáHranica)
Konštruktor nastavujúci generátoru radu nové predvolené hranice.
|
Rad(int spodnáHranica,
int vrchnáHranica,
int krok)
Konštruktor nastavujúci generátoru radu predvolené hranice a krok.
|
Modifikátor a typ | Metóda a opis |
---|---|
int |
daj()
Aktívne čítanie hodnôt radu.
|
int |
dajHodnotu(int parameter)
Výpočet hodnoty radu podľa zadaného parametra, ktorý sa dá chápať
aj ako „poradové číslo“ (alebo skôr index) hodnoty radu.
|
int |
dolnaHranica()
Alias pre
spodnáHranica . |
int |
dolnáHranica()
Vráti aktuálnu hodnotu spodnej hranice radu.
|
void |
dolnaHranica(int dolnáHranica)
Alias pre
spodnáHranica . |
void |
dolnáHranica(int dolnáHranica)
Upraví spodnú hranicu tohto generátora pri zachovaní najmenej
jednotkového rozdielu medzi hranicami a zabezpečení hodnoty spodnej
hranice nižšej od vrchnej hranice.
|
int |
hodnota()
Pasívne prečítanie aktuálnej hodnoty radu.
|
void |
hodnota(int hodnota)
Nastavenie novej aktuálnej hodnoty tejto inštancie.
|
int |
hornaHranica()
Alias pre
vrchnáHranica . |
int |
hornáHranica()
Vráti aktuálnu hodnotu vrchnej hranice radu.
|
void |
hornaHranica(int hornáHranica)
Alias pre
vrchnáHranica . |
void |
hornáHranica(int hornáHranica)
Upraví vrchnú hranicu tohto generátora pri zachovaní najmenej
jednotkového rozdielu medzi hranicami a zabezpečení hodnoty spodnej
hranice nižšej od vrchnej hranice.
|
int |
krok()
Vráti aktuálny krok radu (mieru prírastku resp. úbytku hodnôt).
|
void |
krok(int krok)
Nastaví novú hodnotu kroku radu (čiže mieru prírastku resp. úbytku
hodnôt radu počas ich aktívneho čítania).
|
void |
naopak()
Prevráti smer zmeny hodnôt radu na opačný k aktuálnemu.
|
int |
parameter(int parameter)
Nastavenie a prečítanie novej aktuálnej hodnoty tejto inštancie
výpočtom z parametra.
|
int |
spodnaHranica()
Alias pre
spodnáHranica . |
int |
spodnáHranica()
Vráti aktuálnu hodnotu spodnej hranice radu.
|
void |
spodnaHranica(int dolnáHranica)
Alias pre
spodnáHranica . |
void |
spodnáHranica(int spodnáHranica)
Upraví spodnú hranicu tohto generátora pri zachovaní najmenej
jednotkového rozdielu medzi hranicami a zabezpečení hodnoty spodnej
hranice nižšej od vrchnej hranice.
|
int |
vrchnaHranica()
Alias pre
vrchnáHranica . |
int |
vrchnáHranica()
Vráti aktuálnu hodnotu vrchnej hranice radu.
|
void |
vrchnaHranica(int hornáHranica)
Alias pre
vrchnáHranica . |
void |
vrchnáHranica(int vrchnáHranica)
Upraví vrchnú hranicu tohto generátora pri zachovaní najmenej
jednotkového rozdielu medzi hranicami a zabezpečení hodnoty spodnej
hranice nižšej od vrchnej hranice.
|
boolean |
vzostupne()
Overí, či je aktuálny smer zmeny hodnôt radu vzostupný
(stúpajúci).
|
void |
vzostupne(boolean vzostupne)
Nastaví smer zmeny hodnôt radu podľa zadaného parametera.
|
void |
zamiesaj()
Alias pre
zamiešaj . |
void |
zamiešaj()
Zamieša tento rad.
|
boolean |
zostupne()
Overí, či je aktuálny smer zmeny hodnôt radu zostupný
(klesajúci).
|
void |
zostupne(boolean zostupne)
Nastaví smer zmeny hodnôt radu podľa zadaného parametera.
|
public Rad()
Predvolený konštruktor. Ponechá všetky predvolené nastavenia inštancie, čo znamená: spodnú hranicu na hodnote 0, vrchnú na 9, krok (mieru zmeny pohybu) na 1, počiatočnú hodnotu na 0 a smer (zmeny hodnôt) na vzostupný.
public Rad(int spodnáHranica, int vrchnáHranica)
Konštruktor nastavujúci generátoru radu nové predvolené hranice. Na to, aby generátor fungoval správne, musí byť medzi hranicami vždy minimálne jednotkový rozdiel, preto ak zú zadané hodnoty hraníc rovnaké, tak je vrchná hranica zväčšená o jednotku. Ak je zadaná spodná hranica väčšia, než vrchná, tak sú hranice vymenené a predvolene je nastavený zostupný smer zmeny hodnôt. Počiatočná hodnota inštancie je potom nastavená na výslednú hodnotu spodnej hranice.
spodnáHranica
– požadovaná spodná hranica radu (ak je väčšia od
vrchnej hranice, tak sa stáva vrchnou hranicou)vrchnáHranica
– požadovaná vrchná hranica radu (ak je menšia od
spodnej hranice, tak sa stáva spodnou hranicou)public Rad(int spodnáHranica, int vrchnáHranica, int krok)
Konštruktor nastavujúci generátoru radu predvolené hranice a krok. Ak sú zadané rovnaké hodnoty hraníc, horná hranica je zväčšená o absolútnu hodnotu kroku, pričom ak je krok záporný, tak je nastavený zostupný predvolený smer zmeny hodnôt (čo je vzhľadom na rozdiel hraníc rovný kroku irelevantné, ale môže to mať vplyv pri včasnej zmene parametrov inštancie inými metódami).
V opačnom prípade (v prípade rozdielnych hodnôt hraníc) môže byť,
naopak, hodnota kroku prispôsobená rozdielu hraníc (pozri aj metódu
krok
). Postup je v tomto prípade taký, že najprv sa
porovnajú hodnoty hraníc. Ak je spodná hranica väčšia, než vrchná, tak
sú hranice vymenené a predvolene je nastavený zostupný smer zmeny
hodnôt (ktorý môže byť ešte raz zvrátený zápornou hodnotou kroku).
Potom je nastavená hodnota kroku presne podľa pravidiel stanovených
metódou krok
.
Vo všetkých prípadoch je nakoniec nastavená počiatočná hodnota generátora a to na výslednú hodnotu spodnej hranice.
spodnáHranica
– požadovaná spodná hranica radu (ak je väčšia od
vrchnej hranice, tak sa stáva vrchnou hranicou)vrchnáHranica
– požadovaná vrchná hranica radu (ak je menšia od
spodnej hranice, tak sa stáva spodnou hranicou)krok
– požadovaný krok radu (miera prírastku resp. úbytku hodnôt;
môže byť upravený podľa hodnôt hraníc – pozri aj metódu
krok
)public int spodnáHranica()
Vráti aktuálnu hodnotu spodnej hranice radu.
Táto metóda je alternatívou metódy dolnáHranica()
.
Ich implementácia je nezávislá (pri prípadnom prekrytí jednej metódy
zostáva funkčnosť druhej nezmenená).
public int spodnaHranica()
Alias pre spodnáHranica
.
public void spodnáHranica(int spodnáHranica)
Upraví spodnú hranicu tohto generátora pri zachovaní najmenej jednotkového rozdielu medzi hranicami a zabezpečení hodnoty spodnej hranice nižšej od vrchnej hranice. To znamená, že ak je zadaná spodná hranica rovná vrchnej, tak je vrchná hranica zvýšená o jedna a ak je zadaná spodná hranica vyššia od vrchnej, tak sú ich hodnoty vymenené. Metóda zároveň zabezpečí, aby aktuálna hodnota kroku nebola väčšia, než je výsledný rozdiel hraníc.
spodnáHranica
– požadovaná spodná hranica radupublic void spodnaHranica(int dolnáHranica)
Alias pre spodnáHranica
.
public int vrchnáHranica()
Vráti aktuálnu hodnotu vrchnej hranice radu.
Táto metóda je alternatívou metódy hornáHranica()
.
Ich implementácia je nezávislá (pri prípadnom prekrytí jednej metódy
zostáva funkčnosť druhej nezmenená).
public int vrchnaHranica()
Alias pre vrchnáHranica
.
public void vrchnáHranica(int vrchnáHranica)
Upraví vrchnú hranicu tohto generátora pri zachovaní najmenej jednotkového rozdielu medzi hranicami a zabezpečení hodnoty spodnej hranice nižšej od vrchnej hranice. To znamená, že ak je zadaná vrchná hranica rovná spodnej, tak je spodná hranica znížená o jedna a ak je zadaná vrchná hranica nižšia od spodnej, tak sú ich hodnoty vymenené. Metóda zároveň zabezpečí, aby aktuálna hodnota kroku nebola väčšia, než je výsledný rozdiel hraníc.
vrchnáHranica
– požadovaná vrchná hranica radupublic void vrchnaHranica(int hornáHranica)
Alias pre vrchnáHranica
.
public int krok()
Vráti aktuálny krok radu (mieru prírastku resp. úbytku hodnôt).
public void krok(int krok)
Nastaví novú hodnotu kroku radu (čiže mieru prírastku resp. úbytku hodnôt radu počas ich aktívneho čítania).
Veľkosť kroku nesmie byť nulová (vo vzorcoch na výpočet hodnôt radu podľa parametra by vznikalo delenie nulou). Ak je zadaná nulová hodnota kroku, tak bude krok nastavený na jednotku.
Hodnota kroku nesmie byť záporná (vzorce na výpočet hodnôt radu podľa parametra boli zostavené tak, že predpokladajú len kladné hodnoty kroku; pri záporných hodnotách kroku by poskytovali úplne nesprávne výsledky). Ak je zadaná záporná hodnota kroku, tak inštancia vnútorne prepne aktuálny smer zmeny hodnôt radu (zo vzostupného na zostupný alebo naopak) a zmení znamienko kroku zo záporného na kladné.
Veľkosť kroku (v absolútnej hodnote) nesmie presiahnuť rozdiel hraníc radu (vrchná hranica mínus spodná hranica). Ak je zadaná hodnota s väčším rozpätím, tak je orezaná presne na hodnotu rozdielu hraníc radu.
krok
– nový krok (miera prírastku resp. úbytku hodnôt) radupublic boolean vzostupne()
Overí, či je aktuálny smer zmeny hodnôt radu vzostupný (stúpajúci).
Táto metóda je opakom metódy zostupne()
.
true
, inak false
public void vzostupne(boolean vzostupne)
Nastaví smer zmeny hodnôt radu podľa zadaného parametera. Ak má byť
aktuálny smer vzostupný (stúpajúci), tak treba zadať hodnotu parametra
true
, v opačnom prípade false
.
Ak je aktuálna hodnota radu najväčšia povolená, tak sa smer pri najbližšom aktívnom čítaní hodnoty i tak zmení na zostupný
Táto metóda je opakom metódy zostupne(boolean zostupne)
.
vzostupne
– ak má byť aktuálny smer zmeny hodnôt radu
vzostupný (stúpajúci), tak treba zadať hodnotu true
,
v opačnom prípade false
public int dolnáHranica()
Vráti aktuálnu hodnotu spodnej hranice radu.
Táto metóda je alternatívou metódy spodnáHranica()
.
Ich implementácia je nezávislá (pri prípadnom prekrytí jednej metódy
zostáva funkčnosť druhej nezmenená).
public int dolnaHranica()
Alias pre spodnáHranica
.
public void dolnáHranica(int dolnáHranica)
Upraví spodnú hranicu tohto generátora pri zachovaní najmenej jednotkového rozdielu medzi hranicami a zabezpečení hodnoty spodnej hranice nižšej od vrchnej hranice.
Táto metóda je aliasom metódy spodnáHranica(int
dolnáHranica)
,
to znamená, že táto metóda vnútorne volá uvedenú metódu (preto
funguje rovnako ako ona).
dolnáHranica
– požadovaná spodná hranica radupublic void dolnaHranica(int dolnáHranica)
Alias pre spodnáHranica
.
public int hornáHranica()
Vráti aktuálnu hodnotu vrchnej hranice radu.
Táto metóda je alternatívou metódy vrchnáHranica()
.
Ich implementácia je nezávislá (pri prípadnom prekrytí jednej metódy
zostáva funkčnosť druhej nezmenená).
public int hornaHranica()
Alias pre vrchnáHranica
.
public void hornáHranica(int hornáHranica)
Upraví vrchnú hranicu tohto generátora pri zachovaní najmenej jednotkového rozdielu medzi hranicami a zabezpečení hodnoty spodnej hranice nižšej od vrchnej hranice.
Táto metóda je aliasom k metóde vrchnáHranica(int
vrchnáHranica)
, to znamená, že táto metóda vnútorne volá uvedenú
metódu (preto funguje rovnako ako ona).
hornáHranica
– požadovaná vrchná hranica radupublic void hornaHranica(int hornáHranica)
Alias pre vrchnáHranica
.
public boolean zostupne()
Overí, či je aktuálny smer zmeny hodnôt radu zostupný (klesajúci).
Táto metóda je opakom metódy vzostupne()
.
true
, inak false
public void zostupne(boolean zostupne)
Nastaví smer zmeny hodnôt radu podľa zadaného parametera. Ak má byť
aktuálny smer zostupný (klesajúci), tak treba zadať hodnotu parametra
true
, v opačnom prípade false
.
Ak je aktuálna hodnota radu najnižšia povolená, tak sa smer pri najbližšom aktívnom čítaní hodnoty i tak zmení na vzostupný.
Táto metóda je opakom metódy vzostupne(boolean
vzostupne)
.
zostupne
– ak má byť aktuálny smer zmeny hodnôt radu
zostupný (klesajúci), tak treba zadať hodnotu true
,
v opačnom prípade false
public void naopak()
Prevráti smer zmeny hodnôt radu na opačný k aktuálnemu. Ak je aktuálna hodnota radu najnižšia povolená a smer sa zmení na zostupný alebo naopak, ak je aktuálna hodnota radu najväčšia povolená a smer sa zmení na vzostupný, tak sa pri najbližšom aktívnom čítaní hodnoty smer spätne prevráti.
public int daj()
Aktívne čítanie hodnôt radu. Pri aktívnom čítaní sa vnútorná
(aktuálna) hodnota radu po prečítaní vždy posunie na nasledujúcu podľa
konfigurácie radu. Pozri metódu hodnota
, ktorá
vykonáva pasívne čítanie hodnôt radu. Ak je pri vzostupnom smere zmien
hodnôt prekročená horná hranica, tak je hodnota upravená späť do
rozmedzia hraníc a smer zmien hodnôt je prevrátený. Podobne to je pri
klesajúcom smere a prekročení spodnej hranice.
public int hodnota()
Pasívne prečítanie aktuálnej hodnoty radu. Pri pasívnom čítaní
sa okrem vrátenia hodnoty nedejú žiadne iné akcie. Pozri metódu
daj
, ktorá vykonáva aktívne čítanie hodnôt radu.
public void hodnota(int hodnota)
Nastavenie novej aktuálnej hodnoty tejto inštancie. Požadovaná hodnota musí vyhovovať konfigurácii radu, inak bude upravená. Konkrétne: ak je zadaná hodnota nižšia od spodnej hranice, tak je výsledná hodnota nastavená na spodnú hranicu, ak je vyššia od hornej, tak je nastavená na najbližší vyhovujúci násobok kroku, pričom to isté platí aj v prípade, že požadovaná hodnota nie je násobkom kroku so začiatkom v spodnej hranici radu.
hodnota
– požadovaná hodnota tohto radu (ak nevyhovie
konfiugrácii tejto inštancie, tak bude upravená)public int parameter(int parameter)
Nastavenie a prečítanie novej aktuálnej hodnoty tejto inštancie
výpočtom z parametra. Parameter sa dá chápať ako „poradové číslo“
(resp. index) hodnoty radu vygenerovanej podľa konfigurácie tejto
inštancie. Parameter môže byť ľubovoľné celé číslo. Príklad: Hodnota
radu s parametrom 0 je rovná spodnej hranici radu, parameter
1 vygeneruje ďalšiu hodnotu radu (to jest hodnotu zvýšenú o krok),
ďalšie parametre v poradí vygenerujú presne také hodnoty
trojuholníkovej postupnosti, aké by boli vygenerované pri sekvenčnom
volaní metódy na aktívne čítanie hodnôt radu – daj
.
Na zistenie hodnoty radu podľa parametra bez jej nastavenia ako
aktuálnej novej hodnoty slúži metóda dajHodnotu
.
Poznámka: Metóda na čítanie hodnoty parametra nie je definovaná, pretože výpočet hodnoty parametra má nekonečne veľa riešení.
parameter
– hodnota parametra, podľa ktorej bude nastavená
(a vrátená) aktuálna hodnota radupublic int dajHodnotu(int parameter)
Výpočet hodnoty radu podľa zadaného parametra, ktorý sa dá chápať
aj ako „poradové číslo“ (alebo skôr index) hodnoty radu. Viac detailov
nájdete v opise metódy parameter
.
Na súčasné zistenie hodnoty radu podľa parametra a jej nastavenie
ako novej aktuálnej hodnoty slúži metóda parameter
.
parameter
– hodnota parametra, z ktorej bude vypočítaná a vrátená
hodnota radu (podľa jeho nastavení; aktuále vlastnosti radu,
hodnota, smer a podobne, zostanú nezmenené)public void zamiešaj()
Zamieša tento rad. Metóda nastaví aktuálnu hodnotu radu na náhodné číslo v rámci jeho hraníc, s ohľadom na hodnotu kroku a náhodne zmení aktuálny smer radu.
public void zamiesaj()
Alias pre zamiešaj
.