public class Oblasť extends Area implements Poloha
Trieda je rozšírením triedy Javy Area
. Oblasť je
ľubovoľná plocha, ktorá môže byť napríklad obkreslená čiarou,
vyplnená farbou, použitá na obmedzenie kreslenia, prípadne na ďalšie účely. Na tvorbe oblasti sa
môže podieľať zvolený robot alebo ju môžeme vytvoriť pomocou útvarov
(Shape
) Javy. Každý robot je schopný produkovať útvary,
ktoré môžu byť využité na vytvorenie oblasti. Filozofia je taká, že
zavoláme metódu robota na nakreslenie útvaru alebo výpis textu (ktoré
zároveň produkujú útvary) a vyprodukovaný útvar (s jeho veľkosťou
a orientáciou) pridáme či odoberieme od tvorenej oblasti, vytvoríme
prienik alebo alternatívu s vytváranou oblasťou. Počas
procesu tvorby oblasti by však bolo nežiaduce (prípadne
nemožné[1]), aby robot súčasne produkované útvary
kreslil[2]. Preto je dobré ho zamestnať na účely tvorby oblasti. Zamestnaný
robot nekreslí útvary ani nepíše texty dovtedy, kým nie je zo služby
uvoľnený (prepustený).
[1] – to sa dotýka útvarov vytvorených
z textu.
[2] – nemali by sme možnosť zabrániť
nakresleniu produkovaného útvaru – zdvihnutie pera by nepomohlo,
pretože jeho poloha nemá na kreslenie útvarov vplyv.
Na tvorbu oblasti je možné použiť tieto metódy robota:
krúžok(polomer)
,
kružnica(polomer)
,
kruh(polomer)
,
elipsa(a, b)
,
kresliElipsu(a, b)
,
vyplňElipsu(a, b)
,
štvorec(polomer)
,
kresliŠtvorec(polomer)
,
vyplňŠtvorec(polomer)
,
obdĺžnik(a, b)
,
kresliObdĺžnik(a, b)
,
vyplňObdĺžnik(a, b)
,
hviezda(polomer)
,
kresliHviezdu(polomer)
,
vyplňHviezdu(polomer)
,
cesta()
,
text(text)
a text(text, spôsobKreslenia)
.
Každá z nich môže byť argumentom metód pridaj
,
odober
, prienik
a alternatíva
.
Príklad:
V tomto príklade sú oblasti použité na nakreslenie šrafovaného obrázka. Oblasti tu slúžia na vymedzenie plochy, do ktorej môže robot kresliť, vďaka čomu bude výsledkom kreslenia šrafov cez celú plochu plátna vyšrafovanie iba vymedzenej plochy.
import
knižnica.*;public
class
ŠrafovanýObrázokZOblastíextends
GRobot
{// Konštruktor hlavného robota.
private
ŠrafovanýObrázokZOblastí() {// Volaním nadradeného konštruktora zmeníme romery plátna
// (volanie nadradeného konštruktora musí byť prvým príkazom
// každého nového konštruktora):
super
(600
,400
);// Pred začatím kreslenia vypneme automatické prekresľovanie,
// aby bol celý proces rýchlejší:
Svet
.nekresli
();// Najskôr zdvihneme pero a vypneme kreslenie tvarov robota,…
zdvihniPero
();nekresliTvary
();// …aby sme mohli nerušene vygenerovať predlohy všetkých oblastí,
// ktoré budeme používať pri kreslení šrafovaného obrázka:
Oblasť
koruna1 =new
Oblasť
(pootočenáElipsa(-100
,80
,0
,50
,100
)); koruna1.pridaj
(pootočenáElipsa(-70
,70
,0
,30
,80
)); koruna1.pridaj
(pootočenáElipsa(-140
,60
,0
,30
,60
));Oblasť
kmeň1 =new
Oblasť
(kmeň(-100
, -70
,0
,40
,140
)); kmeň1.odober
(koruna1);Oblasť
koruna2 =new
Oblasť
(pootočenáElipsa(140
,70
,0
,40
,80
)); koruna2.pridaj
(pootočenáElipsa(110
,80
,0
,30
,60
)); koruna2.pridaj
(pootočenáElipsa(180
,60
,0
,30
,50
));Oblasť
kmeň2 =new
Oblasť
(kmeň(140
, -60
,0
,30
,120
)); kmeň2.odober
(koruna2);Oblasť
krík1 =new
Oblasť
(pootočenáElipsa(25
, -50
,0
,80
,50
)); krík1.pridaj
(pootočenáElipsa(-5
, -20
,10
,35
,30
)); krík1.pridaj
(pootočenáElipsa(55
, -20
, -10
,35
,30
)); krík1.pridaj
(pootočenáElipsa(-35
, -70
,10
,35
,30
)); krík1.pridaj
(pootočenáElipsa(75
, -70
, -10
,35
,30
));Oblasť
krík2 =new
Oblasť
(pootočenáElipsa(275
, -60
,0
,75
,45
)); krík2.pridaj
(pootočenáElipsa(245
, -30
,10
,30
,25
)); krík2.pridaj
(pootočenáElipsa(305
, -30
, -10
,30
,25
)); krík2.pridaj
(pootočenáElipsa(215
, -80
,10
,30
,25
)); krík2.pridaj
(pootočenáElipsa(325
, -80
, -10
,30
,25
));Oblasť
krík3 =new
Oblasť
(pootočenáElipsa(-265
, -80
,0
,75
,45
)); krík3.pridaj
(pootočenáElipsa(-235
, -50
,10
,30
,25
)); krík3.pridaj
(pootočenáElipsa(-295
, -50
, -10
,30
,25
)); krík3.pridaj
(pootočenáElipsa(-205
, -100
,10
,30
,25
)); krík3.pridaj
(pootočenáElipsa(-315
, -100
, -10
,30
,25
));Oblasť
horizont = horizont();Oblasť
slnko = kružnicaNa(280
,200
,80
);Oblasť
oblak = oblak();
// (Všimnite si, že od oblasti zeme a oblohy musíme odčítať všetky
// také oblasti, ktoré ich prekrývajú, inak by šrafovanie zasiahlo
// aj do nich.)
Oblasť
zem =new
Oblasť
(horizont); zem.odober
(koruna1); zem.odober
(kmeň1); zem.odober
(koruna2); zem.odober
(kmeň2); zem.odober
(krík1); zem.odober
(krík2); zem.odober
(krík3);// Počiatočný tvar oblasti oblohy získame odčítaním oblasti
// horizontu od obdĺžnika prekrývajúceho celé plátno (zasahujúc
// mierne za jeho hranice):
domov
();Oblasť
obloha =new
Oblasť
(obdĺžnik(310
,210
)); obloha.odober
(horizont);// (Potom pokračujeme odčítavaním oblastí tvarov, ktoré oblohu
// prekrývajú – ako je napísané vyššie.)
obloha.odober
(koruna1); obloha.odober
(kmeň1); obloha.odober
(koruna2); obloha.odober
(kmeň2); obloha.odober
(krík1); obloha.odober
(krík2); obloha.odober
(krík3); obloha.odober
(slnko); obloha.odober
(oblak);
// Pred šrafovaním položíme pero:
položPero
();
// A vyšrafujeme a obkreslíme jednotlivé oblasti:
kresliDo
(koruna1); šrafovanie3();kresliVšade
(); koruna1.kresli
(this
);// <-- toto znamená, že koruna1 bude
// nakreslená „týmto“ (this), to jest
// aktuálnym robotom
kresliDo
(kmeň1); šrafovanie4();kresliVšade
(); kmeň1.kresli
(this
);kresliDo
(koruna2); šrafovanie4();kresliVšade
(); koruna2.kresli
(this
);kresliDo
(kmeň2); šrafovanie3();kresliVšade
(); kmeň2.kresli
(this
);
kresliDo
(krík1); šrafovanie3(); šrafovanie4();kresliVšade
(); krík1.kresli
(this
);kresliDo
(krík2); šrafovanie3(); šrafovanie4();kresliVšade
(); krík2.kresli
(this
);kresliDo
(krík3); šrafovanie3(); šrafovanie4();kresliVšade
(); krík3.kresli
(this
);
kresliDo
(zem); šrafovanie1();kresliVšade
(); zem.kresli
(this
);kresliDo
(obloha); šrafovanie2();kresliVšade
(); obloha.kresli
(this
);
kresliDo
(slnko); šrafovanie3();kresliVšade
(); slnko.kresli
(this
);kresliDo
(oblak); šrafovanie4();kresliVšade
(); oblak.kresli
(this
);
// Obrázok je hotový, spätne zapneme prekresľovanie:
Svet
.kresli
(); }
// Šrafovanie vo vertikálnom (zvislom) smere.
// (Implementácia sa spolieha na presné rozmery plátna: 600 × 400 bodov.)
private
void
šrafovanie1() {smer
(90
);for
(int
i =0
; i <41
; ++i) {skočNa
(-300
+ i *15
, -200
);dopredu
(400
); } }// Šrafovanie v horizontálnom (vodorovnom) smere.
// (Implementácia sa spolieha na presné rozmery plátna: 600 × 400 bodov.)
private
void
šrafovanie2() {smer
(0
);for
(int
i =0
; i <28
; ++i) {skočNa
(-300
, -200
+ i *15
);dopredu
(600
); } }// Šrafovanie v diagonálnom smere 45° (zospodu zľava hore doprava).
// (Implementácia sa spolieha na presné rozmery plátna: 600 × 400 bodov.)
private
void
šrafovanie3() {smer
(45
);for
(int
i =0
; i <68
; ++i) {skočNa
(300
- i *15
, -200
);dopredu
(580
); } }// Šrafovanie v diagonálnom smere 135° (zospodu sprava hore doľava).
// (Implementácia sa spolieha na presné rozmery plátna: 600 × 400 bodov.)
private
void
šrafovanie4() {smer
(135
);for
(int
i =0
; i <68
; ++i) {skočNa
(-300
+ i *15
, -200
);dopredu
(580
); } }
// Nasledujúca metóda slúži na vygenerovanie oblasti v tvare pootočenej
// elipsy (so stanovením jej rozmerov).
// sx – x-ová súradnica stredu elipsy
// sy – y-ová súradnica stredu elipsy
// α – uhol pootočenia elipsy
// a – veľkosť hlavnej poloosi elipsy
// b – veľkosť vedľajšej poloosi elipsy
private
Oblasť pootočenáElipsa(double
sx,double
sy,double
α,double
a,double
b) {skočNa
(sx, sy);smer
(90
+ α);return
new
Oblasť
(elipsa
(a, b)); }// Nasledujúca metóda slúži na vygenerovanie oblasti, ktorú ohraničuje
// kružnica s určením jej stredu (a samozrejme i polomeru).
// sx – x-ová súradnica stredu kružnice
// sy – y-ová súradnica stredu kružnice
// r – polomer kružnice
private
Oblasť
kružnicaNa(double
sx,double
sy,double
r) {skočNa
(sx, sy);return
new
Oblasť
(kružnica
(r)); }
// Nasledujúca metóda slúži na vygenerovanie tvaru nazvaného kmeň. Ide
// o tvar získaný odrezaním plôšok z dvoch protiľahlých strán obdĺžnika,
// pričom plôšky sú určené oblúčikmi tak, že v podstate vymedzujú
// kruhové odseky. Tento tvar dokážeme získať rôznymi spôsobmi, ale
// v tomto príklade ho vytvárame z cesty (čiže akoby zo záznamu dráhy,
// ktorú robot prechádza), pričom okrem priamočiareho kráčania
// použijeme aj príkazy robota na kráčanie po oblúku.
// sx – x-ová súradnica stredu kmeňa
// sy – y-ová súradnica stredu kmeňa
// α – pootočenie tvaru kmeňa
// š – šírka kmeňa
// v – výška kmeňa
private
Oblasť
kmeň(double
sx,double
sy,double
α,double
š,double
v) {// Najprv treba vypočítať/získať súradnice rohov obdĺžnika
// ohraničujúceho tvar kmeňa.
// Prvým krokom je presun na súradnice stredu, pootočenie
// a potom presun na súradnice ľavého dolného rohu kmeňa:
skočNa
(sx, sy);smer
(90
+ α);dozadu
(v /2.0
);posuňDoľava
(š /2.0
);// Potom pokračujeme postupným zapamätávaním aktuálnych súradníc
// a pochodovanie po ohraničujúcom obdĺžniku, čím získavame súradnice
// rohov obdĺžnika:
Bod
vľavoDole =poloha
();dopredu
(v);Bod
vľavoHore =poloha
();vpravo
(90
);dopredu
(š);Bod
vpravoHore =poloha
();vpravo
(90
);dopredu
(v);Bod
vpravoDole =poloha
();// Teraz môžeme začať kresliť tvar kmeňa. Najprv sa presunieme
// do ľavého spodného rohu a pootočíme robot o 10° doprava vzhľadom
// na počiatočné pootočenie, čiže presne na uhol 80° + α:
skočNa
(vľavoDole);smer
(80
+ α);// Zahájime záznam cesty a postupne sa rôznymi spôsobmi posúvame do
// ďalších rohov ohraničujúceho obdĺžnika tak, aby sme získali
// požadovaný tvar:
začniCestu
();choďNaPoOblúku
(vľavoHore);choďNa
(vpravoHore);smer
(260
+ α);choďNaPoOblúku
(vpravoDole);// Nakoniec cestu zavrieme a výsledný tvar vrátime:
uzavriCestu
();return
new
Oblasť
(cesta
()); }
// Tvar horizontu je vytvorený napevno ako obdĺžnik, ktorý je o niečo
// širší ako šírka plátna, je tiež posunutý mierne pod úroveň rozmerov
// plátna a namiesto hornej strany má čiaru vytvorenú z niekoľkých
// oblúkov.
// (Implementácia sa spolieha na presné rozmery plátna: 600 × 400 bodov.)
private
Oblasť
horizont() {skočNa
(-310
, -210
);začniCestu
();choďNa
(-310
, -80
);smer
(30
);choďNaPoOblúku
(50
,0
);choďNaPoOblúku
(230
, -50
);choďNaPoOblúku
(310
, -50
);choďNa
(310
, -210
);uzavriCestu
();return
new
Oblasť
(cesta
()); }// Tvar oblaku je najkomplikovanejší z generovaných tvarov. Je
// vytvorený zlúčením trojice „chumáčov“ rotovaných elíps. Tvar je
// v tomto príklade vytvorený napevno. Keby sme ho chceli
// parametrizovať (získať možnosť úpravy jeho polohy, prípadne
// orientáciu a podobne), museli by sme sa zamerať na požadované
// časti metódy – poloha chumáčov je nastavená pomocou trojice:
// riadiaca štruktúra switch a volanie metód smer a dopredu;
// s úpravou orientácie oblaku by to bolo komplikovanejšie, na to
// by bolo potrebné metódu mierne prepracovať.
private
Oblasť
oblak() {// Vytvorenie oblasti, do ktorej budú postupne zlučované všetky
// vygenerované elipsy:
Oblasť
oblak =new
Oblasť
();// Vonkajší cyklus určuje, že budú vygenerované tri „chumáče“ elíps:
for
(int
j =0
; j <3
; ++j) {// Vnútorný cyklus určuje, že každý „chumáč“ bude pozostávať
// z piatich elíps:
for
(int
i =0
; i <5
; ++i) {// Toto vetvenie určuje stredy jednotlivých „chumáčov“:
switch
(j) {case
0
:skočNa
(-280
,200
);break
;case
1
:skočNa
(-250
,220
);break
;case
2
:skočNa
(-220
,200
);break
; }// Tieto dva príkazy rozmiestňujú elipsy v rámci jedného
// „chumáča“:
smer
(75
* i);dopredu
(20
);// Vygenerovanie elipsy a jej pridanie do oblasti:
oblak.pridaj
(elipsa
(50
,30
)); } }// Vrátenie výsledného tvaru oblaku:
return
oblak; }
// Hlavná metóda.
public
static
void
main(String
... args) {Svet
.použiKonfiguráciu
("srafovany-obrazok-z-oblasti.cfg"
);new
ŠrafovanýObrázokZOblastí(); } }
Výsledok:
Skica obrázka – všetky použité tvary (len predlohy) s vyznačením plochy plátna (tyrkysovou farbou). |
Výsledný vyšrafovaný obrázok. |
Výsledok je vcelku uspokojivý. No čo ak by sme chceli štyri metódy na šrafovanie nahradiť jedinou univerzálnou? Metódou, ktorá by dovoľovala určiť šírku šrafov a ich smer?
Poznámka: Zachováme spôsob prešrafovania celej plochy plátna, pretože tento spôsob dokáže bez dodatočných úprav v algoritme zabezpečiť univerzálne polohovanie šrafov v rôznych tvaroch pri zadaní rovnakých parametrov rozostupu a smeru šrafovania. Ak by nám na univerálnom polohovaní nezáležalo (alebo by sme si ho boli ochotní algoritmicky doriešiť) a chceli by sme byť úsporní a prešrafovať len plochu šrafovanej oblasti, museli by sme zadať šrafovanú oblasť ako parameter metódy a potom by bolo treba: nahradiť zisťovanie šírky a výšky plátien šírkou a výškou oblasti, použiť príkaz na hľadanie vzdialenosti k stredu oblasti (resp. tvaru) a nahradiť alebo eliminovať príkaz prechodu na domovskú pozíciu robota, napríklad nahradiť ho príkazom prechodu (preskoku) do stredu oblasti alebo eliminovať ho zabezpečením tohto prechodu (do stredu oblasti) už na začiatku algoritmu a zisťovaním vzdialenosti k opačnému bodu vyšetrovanej pomyselnej úsečky – robot by sa potom už nemusel dodatočne nikam presúvať.
Takáto metóda je uvedená nižšie a funguje tak, že najskôr zistí rozsah šrafovania, presunie sa mimo šrafovanú plochu v určenom smere šrafovania a prešrafuje ju s použitím určeného rozostupu šrafov.
private
void
šrafovanie(double
smer,double
rozostup) {// Presun za hranice plôch plátien sveta (o vzdialenosť šírky
// šrafovania v oboch smeroch osí súradnicovej sústavy do pravého
// horného rohu plôch plátien) a zistenie vzdialenosti od stredu
// súradnicovej sústavy. Táto vzdialenosť bude určovať rozsah
// šrafovania od stredu šrafovanej plochy (t. j. celého plátna):
skočNa
(Svet
.šírka
() + rozostup,Svet
.výška
() + rozostup);double
rozsah =vzdialenosť
();// Presun na začiatok (ak predpokladáme, že domovskú pozíciu
// nebudeme meniť) a nasmerovanie sa do smeru šrafovania:
domov
();smer
(smer);// Presun za hranice šrafovanej plochy o zistený rozsah:
zdvihniPero
();dozadu
(rozsah);posuňVpravo
(rozsah);// Postupné prešrafovanie celej plochy:
for
(double
l = -rozsah; l < rozsah; l += rozostup) {položPero
();dopredu
(2
* rozsah);zdvihniPero
();vzad
(2
* rozsah);posuňVľavo
(rozostup); } }
Skutočný priebeh šrafovania obdĺžnikového tvaru (napríklad celého plátna) v smere 72° a s rozostupom 4 body:
Skutočný priebeh šrafovania príkazom
šrafovanie(72, 4)
z nadhľadu – tyrkysový obdĺžnik
vymedzuje plochu šrafovanej oblasti.
Nižšie je obrázok šrafovaný metódami zhrnutými v nasledujúcej tabuľke:
|
|
Výsledok šrafovania obrázka príkazmi
uvedenými v tabuľke vyššie.
Na záver niekoľko faktov o oblastiach a o ich vnútornej stavbe.
Informácie vyplývajú aj z originálnej dokumentácie triedy Area
(pozri odkaz nižšie). Oblasť tvorí vždy uzavretý útvar (obopína
vždy nejakú plochu po celom jej obvode). Aj keď bola vytvorená
z tvaru, ktorý pôvodne nebol je uzavretý (napríklad neuzavretá cesta
). Ak sa pokúsime vytvoriť oblasť z útvaru, ktorý
„nemá“ (neobopína) žiadnu plochu (napríklad úsečka), získame
prázdnu oblasť. Aj keď útvary, z ktorých
oblasť tvoríme, sú jednoduché, výsledná oblasť nikdy nie je
v skutočnosti taká jednoduchá. Napríklad kružnica alebo elipsa sú na pohľad jednoduché, ale
z nich vytvorená oblasť bude vždy tvorená viacerými segmentami
(v tomto prípade krivkami). Zložitosť oblasti má vplyv na rýchlosť
spracovania pri jej použití v programe, najmä na detekciu
kolízií.
Area
Konštruktor a opis |
---|
Oblasť()
Predvolený konštruktor.
|
Oblasť(GRobot zamestnanec)
Vytvorí prázdnu oblasť so zadaným zamestnancom.
|
Oblasť(Shape tvar)
Vytvorí oblasť z určeného tvaru.
|
Oblasť(Shape tvar,
GRobot zamestnanec)
Vytvorí oblasť z určeného tvaru a so zadaným zamestnancom.
|
Modifikátor a typ | Metóda a opis |
---|---|
void |
alternativa(Shape tvar)
Alias pre
alternatíva . |
void |
alternatíva(Shape tvar)
Vytvorí z oblasti a zadaného tvaru alternatívu – XOR (vylučujúce
alebo, buď/alebo).
|
boolean |
bodV(double súradnicaBoduX,
double súradnicaBoduY)
Zistí, či sa súradnice zadaného bodu nachádzajú v tejto oblasti.
|
boolean |
bodV(Poloha r)
Zistí, či sa bod polohy robota nachádza v tejto oblasti.
|
boolean |
jeNa(double x,
double y)
Overí, či sa poloha tejto oblasti (t. j. súradníc jej stredu)
dokonale zhoduje so zadanými súradnicami.
|
boolean |
jeNa(Poloha poloha)
Overí, či sa poloha tejto oblasti (t. j. súradníc jej stredu)
a poloha zadaného objektu dokonale zhodujú.
|
void |
kresli()
Nakreslí túto oblasť s využitím zamestnaného robota (použije jeho farbu alebo náter, hrúbku pera
a aktívne plátno).
|
void |
kresli(GRobot r)
Nakreslí túto oblasť na aktívne plátno aktuálnou farbou (alebo
náterom) a hrúbkou pera zadaného robota.
|
boolean |
mysV()
Alias pre
myšV . |
boolean |
myšV()
Zistí, či sa aktuálne súradnice myši nachádzajú v tejto oblasti.
|
void |
odober(Shape tvar)
Odoberie z oblasti zadaný tvar.
|
Bod |
poloha()
Vypočíta a vráti polohu stredu oblasti.
|
double |
polohaX()
Vypočíta a vráti x-ovú súradnicu polohy stredu oblasti.
|
double |
polohaY()
Vypočíta a vráti y-ovú súradnicu polohy stredu oblasti.
|
boolean |
prazdna()
Alias pre
prázdna . |
boolean |
prázdna()
Zistí, či je táto oblasť prázdna – t. j. či obopína nejakú plochu.
|
void |
prepusti()
Alias pre
uvoľni . |
void |
prepusti(GRobot zamestnanec)
Alias pre
uvoľni . |
void |
pridaj(Shape tvar)
Pridá k oblasti zadaný tvar.
|
void |
prienik(Shape tvar)
Vytvorí prienik oblasti a zadaného tvaru.
|
double |
sirka()
Alias pre
šírka . |
double |
suradnicaX()
Alias pre
súradnicaX . |
double |
súradnicaX()
Vypočíta a vráti x-ovú súradnicu polohy stredu oblasti.
|
double |
suradnicaY()
Alias pre
súradnicaY . |
double |
súradnicaY()
Vypočíta a vráti y-ovú súradnicu polohy stredu oblasti.
|
double |
šírka()
Vráti šírku oblasti.
|
void |
uvolni()
Alias pre
uvoľni . |
void |
uvoľni()
Automaticky uvoľní robot zamestnaný na účely tvorby (prípadne kreslenia) tejto oblasti.
|
void |
uvolni(GRobot zamestnanec)
Alias pre
uvoľni . |
void |
uvoľni(GRobot zamestnanec)
Uvoľní robot zamestnaný na
účely tvorenia tejto oblasti.
|
void |
vymaz()
Alias pre
vymaž . |
void |
vymaž()
Kompletne odstráni geometriu oblasti – vyprázdni oblasť.
|
void |
vypln()
Alias pre
vyplň . |
void |
vyplň()
Vyplní plochu tejto oblasti s využitím zamestnaného robota (použije jeho farbu alebo
náter a aktívne plátno).
|
void |
vypln(GRobot r)
Alias pre
vyplň . |
void |
vyplň(GRobot r)
Vyplní plochu tejto oblasti na aktívne plátno aktuálnou farbou
(alebo náterom) zadaného robota.
|
void |
vypln(GRobot r,
Image výplň)
Alias pre
vyplň . |
void |
vyplň(GRobot r,
Image výplň)
Vyplní plochu tejto oblasti na aktívne plátno zadaného robota
zadanou textúrou.
|
void |
vypln(GRobot r,
String súbor)
Alias pre
vyplň . |
void |
vyplň(GRobot r,
String súbor)
Vyplní plochu tejto oblasti na aktívne plátno zadaného robota
zadanou textúrou.
|
void |
vypln(Image výplň)
Alias pre
vyplň . |
void |
vyplň(Image výplň)
Vyplní plochu tejto oblasti textúrou s využitím zamestnaného robota (použije jeho aktívne
plátno).
|
void |
vypln(String súbor)
Alias pre
vyplň . |
void |
vyplň(String súbor)
Vyplní plochu tejto oblasti textúrou s využitím zamestnaného robota (použije jeho aktívne
plátno).
|
double |
vyska()
Alias pre
výška . |
double |
výška()
Vráti výšku oblasti.
|
void |
zamestnaj(GRobot zamestnanec)
Zamestná zadaného robota na účely tvorby tejto oblasti.
|
boolean |
zamestnany()
Alias pre
zamestnaný . |
boolean |
zamestnaný()
Overí, či je pre túto oblasť zamestnaný ľubovoľný robot.
|
boolean |
zamestnany(GRobot zamestnanec)
Alias pre
zamestnaný . |
boolean |
zamestnaný(GRobot zamestnanec)
Overí, či je pre túto oblasť zamestnaný určený robot.
|
add, clone, contains, contains, contains, contains, createTransformedArea, equals, exclusiveOr, getBounds, getBounds2D, getPathIterator, getPathIterator, intersect, intersects, intersects, isEmpty, isPolygonal, isRectangular, isSingular, reset, subtract, transform
public Oblasť()
Predvolený konštruktor. Dovoľuje vytvoriť oblasť bez spresňujúcich parametrov.
public Oblasť(Shape tvar)
Vytvorí oblasť z určeného tvaru.
tvar
– ľubovoľný tvar Javy; ak sa chcete vyhnúť ťažkostiam
s úpravou súradnicového priestoru, odporúčame na generovanie
tvarov používať metódy robota (pozri úvod), najlepšie toho, ktorý bol na účely tvorby tejto
oblasti zamestnanýpublic Oblasť(GRobot zamestnanec)
Vytvorí prázdnu oblasť so zadaným zamestnancom. Pre podrobnosti
o zamestnancovi pozri metódu zamestnaj
.
zamestnanec
– robot, ktorý má byť použitý na účely tvorby
tejto oblasti (prípadne na jej nakreslenie)GRobotException
– ak je stanovený robot zamestnaný pre inú
oblasťpublic Oblasť(Shape tvar, GRobot zamestnanec)
Vytvorí oblasť z určeného tvaru a so zadaným zamestnancom. Pre
podrobnosti o zamestnancovi pozri metódu zamestnaj
.
tvar
– ľubovoľný tvar Javy; ak sa chcete vyhnúť ťažkostiam
s úpravou súradnicového priestoru, odporúčame na generovanie
tvarov používať metódy robota (pozri úvod), najlepšie toho, ktorý bol na účely tvorby tejto
oblasti zamestnanýzamestnanec
– robot, ktorý má byť použitý na účely tvorby
tejto oblasti (prípadne na jej nakreslenie)GRobotException
– ak je stanovený robot zamestnaný pre inú
oblasťpublic boolean prázdna()
Zistí, či je táto oblasť prázdna – t. j. či obopína nejakú plochu.
true
ak je táto oblasť prázdna
(netvorí/neobsahuje žiadny útvar); inak false
public boolean prazdna()
Alias pre prázdna
.
public void zamestnaj(GRobot zamestnanec)
Zamestná zadaného robota na účely tvorby tejto oblasti. Oblasť môže byť vytvorená aj bez pomoci robota (prostriedkami Javy), avšak na využitie možností robota, je jednoduchšie zamestnať robot, ktorý pomôže vytvoriť oblasť pomocou svojich prostriedkov na kreslenie útvarov a písanie textov (resp. „kreslenie“ textov). Každý robot stráca súčasne so zamestnaním schopnosť kreslenia a vypĺňania útvarov (okrem kreslenia a vypĺňania cesty) a písania textov. Je to z dôvodu presunutia týchto schopností do tvorby oblasti… Po prepustení robota zo služby sa jeho schopnosti automaticky obnovia.
Robot nesmie byť zamestnaný pre inú oblasť, lebo vznikne výnimka.
Na tvorbu oblasti je možné použiť tieto metódy robota:
krúžok(polomer)
,
kružnica(polomer)
,
kruh(polomer)
,
elipsa(a, b)
,
kresliElipsu(a, b)
,
vyplňElipsu(a, b)
,
štvorec(polomer)
,
kresliŠtvorec(polomer)
,
vyplňŠtvorec(polomer)
,
obdĺžnik(a, b)
,
kresliObdĺžnik(a, b)
,
vyplňObdĺžnik(a, b)
,
hviezda(polomer)
,
kresliHviezdu(polomer)
,
vyplňHviezdu(polomer)
,
cesta()
,
text(text)
a text(text, spôsobKreslenia)
.
Každá z nich môže byť argumentom metód pridaj
, odober
, prienik
a alternatíva
.
zamestnanec
– robot, ktorý má byť použitý na účely tvorby
tejto oblasti (prípadne na jej nakreslenie)GRobotException
– ak je robot zamestnaný pre inú oblasťpublic void uvoľni()
Automaticky uvoľní robot zamestnaný na účely tvorby (prípadne kreslenia) tejto oblasti. Ak taký robot nejestvuje, volanie metódy nemá žiadny efekt.
Poznámka: Názov uvoľni
má
v programovacom rámci GRobot deväť rôznych metód:
GRobot
.
uvoľni
()
,
GRobot
.
uvoľni
(
Oblasť
)
,
Oblasť
.
uvoľni
()
,
Oblasť
.
uvoľni
(
GRobot
)
–
slúžia na uvoľnenie robota zo zamestnania pre stanovenú
oblasť (čo je geometrická trieda),
Svet
.
uvoľni
()
–
slúži na uvoľnenie hlavného okna sveta, t. j. umožnenie
zmeny veľkosti okna používateľovi (ide o opak metódy Svet.upevni
) a nakoniec
Svet
.
uvoľni
(
GRobot
)
,
Svet
.
uvoľni
(
Class
)
,
Svet
.
uvoľni
(
Plazma
)
Svet
.
uvoľni
(
Obrázok
)
a Svet
.
uvoľni
(
String
)
–
slúžia na uvoľňovanie nepotrebných inštancií robotov,
vytvorených alebo prečítaných obrázkov a prečítaných zvukov
z vnútorných zoznamov zdrojov (robotov, obrázkov, zvukov), čo
je jednak nevyhnutnou podmienkou ich úspešného vymazania
z pamäte zberačom odpadkov Javy a jednak to môže byť niekedy
potrebné (napríklad ak sa obsah súboru so zdrojom uloženým na
disku zmenil).
uvoľni(GRobot)
,
GRobot.uvoľni()
public void uvolni()
Alias pre uvoľni
.
public void prepusti()
Alias pre uvoľni
.
public void uvoľni(GRobot zamestnanec)
Uvoľní robot zamestnaný na účely tvorenia tejto oblasti. Ak zadaný robot nebol zamestnaný pre túto oblasť, volanie tejto metódy nemá žiadny efekt.
Poznámka: Názov uvoľni
má
v programovacom rámci GRobot deväť rôznych metód:
GRobot
.
uvoľni
()
,
GRobot
.
uvoľni
(
Oblasť
)
,
Oblasť
.
uvoľni
()
,
Oblasť
.
uvoľni
(
GRobot
)
–
slúžia na uvoľnenie robota zo zamestnania pre stanovenú
oblasť (čo je geometrická trieda),
Svet
.
uvoľni
()
–
slúži na uvoľnenie hlavného okna sveta, t. j. umožnenie
zmeny veľkosti okna používateľovi (ide o opak metódy Svet.upevni
) a nakoniec
Svet
.
uvoľni
(
GRobot
)
,
Svet
.
uvoľni
(
Class
)
,
Svet
.
uvoľni
(
Plazma
)
Svet
.
uvoľni
(
Obrázok
)
a Svet
.
uvoľni
(
String
)
–
slúžia na uvoľňovanie nepotrebných inštancií robotov,
vytvorených alebo prečítaných obrázkov a prečítaných zvukov
z vnútorných zoznamov zdrojov (robotov, obrázkov, zvukov), čo
je jednak nevyhnutnou podmienkou ich úspešného vymazania
z pamäte zberačom odpadkov Javy a jednak to môže byť niekedy
potrebné (napríklad ak sa obsah súboru so zdrojom uloženým na
disku zmenil).
zamestnanec
– robot, ktorý bol zamestnaný pre túto oblasťuvoľni()
,
GRobot.uvoľni(Oblasť)
public boolean zamestnaný()
Overí, či je pre túto oblasť zamestnaný ľubovoľný robot.
true
/false
public boolean zamestnany()
Alias pre zamestnaný
.
public boolean zamestnaný(GRobot zamestnanec)
Overí, či je pre túto oblasť zamestnaný určený robot.
zamestnanec
– vyšetrovaný robottrue
/false
public boolean zamestnany(GRobot zamestnanec)
Alias pre zamestnaný
.
public void pridaj(Shape tvar)
Pridá k oblasti zadaný tvar.
tvar
– ľubovoľný tvar Javy; ak sa chcete vyhnúť ťažkostiam
s úpravou súradnicového priestoru, odporúčame na generovanie
tvarov používať metódy robota (pozri úvod), najlepšie toho, ktorý bol na účely tvorby tejto
oblasti zamestnanýzamestnaj(GRobot)
public void odober(Shape tvar)
Odoberie z oblasti zadaný tvar.
tvar
– ľubovoľný tvar Javy; ak sa chcete vyhnúť ťažkostiam
s úpravou súradnicového priestoru, odporúčame na generovanie
tvarov používať metódy robota (pozri úvod), najlepšie toho, ktorý bol na účely tvorby tejto
oblasti zamestnanýzamestnaj(GRobot)
public void prienik(Shape tvar)
Vytvorí prienik oblasti a zadaného tvaru.
tvar
– ľubovoľný tvar Javy; ak sa chcete vyhnúť ťažkostiam
s úpravou súradnicového priestoru, odporúčame na generovanie
tvarov používať metódy robota (pozri úvod), najlepšie toho, ktorý bol na účely tvorby tejto
oblasti zamestnanýzamestnaj(GRobot)
public void alternatíva(Shape tvar)
Vytvorí z oblasti a zadaného tvaru alternatívu – XOR (vylučujúce alebo, buď/alebo). Nová oblasť bude obsahovať také plochy, ktoré patrili buď výlučne do pôvodnej oblasti, alebo výlučne do zadaného tvaru.
tvar
– ľubovoľný tvar Javy; ak sa chcete vyhnúť ťažkostiam
s úpravou súradnicového priestoru, odporúčame na generovanie
tvarov používať metódy robota (pozri úvod), najlepšie toho, ktorý bol na účely tvorby tejto
oblasti zamestnanýzamestnaj(GRobot)
public void alternativa(Shape tvar)
Alias pre alternatíva
.
public void vymaž()
Kompletne odstráni geometriu oblasti – vyprázdni oblasť. Použiteľné pri recyklovaní objektu, keď vykonal prácu na ktorú bol určený…
public void vymaz()
Alias pre vymaž
.
public void kresli()
Nakreslí túto oblasť s využitím zamestnaného robota (použije jeho farbu alebo náter, hrúbku pera
a aktívne plátno). Keď bol robot medzičasom uvoľnený zo služby, nebude mať volanie tejto
metódy žiadny efekt. Volanie tejto metódy nakreslí oblasť tak, ako
bola vytvorená. Keď chcete využiť aj aktuálnu polohu a rotáciu
robota, volajte metódu obkresliOblasť
.
public void vyplň()
Vyplní plochu tejto oblasti s využitím zamestnaného robota (použije jeho farbu alebo
náter a aktívne plátno). Keď bol robot medzičasom uvoľnený zo služby, tak nemá volanie tejto metódy
žiadny efekt. Volanie tejto metódy vyplní oblasť tak, ako bola
vytvorená. Keď chcete využiť aj aktuálnu polohu a rotáciu robota,
volajte metódu vyplňOblasť
.
public void vypln()
Alias pre vyplň
.
public void vyplň(String súbor)
Vyplní plochu tejto oblasti textúrou s využitím zamestnaného robota (použije jeho aktívne
plátno). Keď bol robot medzičasom uvoľnený zo služby, tak nemá volanie tejto metódy
žiadny efekt. Volanie tejto metódy vyplní oblasť tak, ako bola
vytvorená. Keď chcete využiť aj aktuálnu polohu a rotáciu robota,
volajte metódu vyplňOblasť
. Textúra je súbor s obrázkom, ktorý bude použitý na
dlaždicové vyplnenie oblasti.
Obrázok (výplne) prečítaný zo súboru je chápaný ako zdroj a po
prečítaní zostane uložený vo vnútornej pamäti sveta. Z nej
môže byť v prípade potreby (napríklad ak sa obsah súboru na
disku zmenil) odstránený metódou Svet.uvoľni(názovZdroja)
. (Táto informácia je platná pre
všetky metódy pracujúce s obrázkami alebo zvukmi, ktoré
prijímajú názov súboru ako parameter.)
Poznámka: Parametre textúry sa dajú
ovplyvňovať špeciálnymi príkazmi. Súvisí s nimi i predvolené
správanie príkazov vypĺňania. Predvolený bod začiatku vypĺňania
dlaždicami sa nachádza v strede plátna alebo vypĺňaného
obrázka. Pozrite si aj opis metódy
posunutieVýplne
,
kde nájdete príklad použitia a odkazy na metódy
upravujúce ďalšie parametre obrázkových výplní.
súbor
– názov súboru s obrázkom textúryGRobotException
– ak súbor s obrázkom nebol nájdený
(identifikátor imageNotFound
)Svet.priečinokObrázkov(String)
public void vyplň(Image výplň)
Vyplní plochu tejto oblasti textúrou s využitím zamestnaného robota (použije jeho aktívne
plátno). Keď bol robot medzičasom uvoľnený zo služby, tak nemá volanie tejto metódy
žiadny efekt. Volanie tejto metódy vyplní oblasť tak, ako bola
vytvorená. Keď chcete využiť aj aktuálnu polohu a rotáciu robota,
volajte metódu vyplňOblasť
. Textúra je obrázok (objekt typu
Image
alebo odvodený), ktorý bude
použitý na dlaždicové vyplnenie oblasti.
Poznámka: Parametre textúry sa dajú
ovplyvňovať špeciálnymi príkazmi. Súvisí s nimi i predvolené
správanie príkazov vypĺňania. Predvolený bod začiatku vypĺňania
dlaždicami sa nachádza v strede plátna alebo vypĺňaného
obrázka. Pozrite si aj opis metódy
posunutieVýplne
,
kde nájdete príklad použitia a odkazy na metódy
upravujúce ďalšie parametre obrázkových výplní.
výplň
– obrázok s textúroupublic void kresli(GRobot r)
Nakreslí túto oblasť na aktívne plátno aktuálnou farbou (alebo
náterom) a hrúbkou pera zadaného robota. Táto metóda nakreslí oblasť
tak, ako bola vytvorená. Keď ju chcete rotovať a/alebo posúvať,
použite metódu obkresliOblasť
.
r
– robot, ktorý bude použitý na nakreslenie tejto oblasti
(iba farba, hrúbka pera a aktívne plánto)public void vyplň(GRobot r)
Vyplní plochu tejto oblasti na aktívne plátno aktuálnou farbou
(alebo náterom) zadaného robota. Táto metóda vyplní oblasť tak, ako
bola vytvorená. Keď ju chcete rotovať a/alebo posúvať, použite
metódu vyplňOblasť
.
r
– robot, ktorý bude použitý na vyplnenie tejto oblasti (iba
farba a aktívne plánto)public void vyplň(GRobot r, String súbor)
Vyplní plochu tejto oblasti na aktívne plátno zadaného robota
zadanou textúrou. Táto metóda vyplní oblasť tak, ako bola
vytvorená.
Keď ju chcete rotovať a/alebo posúvať, použite metódu vyplňOblasť
. Textúra je súbor
s obrázkom, ktorý bude použitý na dlaždicové vyplnenie oblasti.
Obrázok (výplne) prečítaný zo súboru je chápaný ako zdroj a po
prečítaní zostane uložený vo vnútornej pamäti sveta. Z nej
môže byť v prípade potreby (napríklad ak sa obsah súboru na
disku zmenil) odstránený metódou Svet.uvoľni(názovZdroja)
. (Táto informácia je platná pre
všetky metódy pracujúce s obrázkami alebo zvukmi, ktoré
prijímajú názov súboru ako parameter.)
r
– robot, ktorý bude použitý na vyplnenie tejto oblasti
(iba aktívne plánto)súbor
– názov súboru s obrázkom textúryGRobotException
– ak súbor s obrázkom nebol nájdený
(identifikátor imageNotFound
)Svet.priečinokObrázkov(String)
public void vyplň(GRobot r, Image výplň)
Vyplní plochu tejto oblasti na aktívne plátno zadaného robota
zadanou textúrou. Táto metóda vyplní oblasť tak, ako bola
vytvorená.
Keď ju chcete rotovať a/alebo posúvať, použite metódu vyplňOblasť
. Textúra je
obrázok (objekt typu Image
alebo odvodený), ktorý bude použitý na dlaždicové
vyplnenie oblasti.
r
– robot, ktorý bude použitý na vyplnenie tejto oblasti
(iba aktívne plánto)výplň
– obrázok s textúroupublic boolean bodV(double súradnicaBoduX, double súradnicaBoduY)
Zistí, či sa súradnice zadaného bodu nachádzajú v tejto oblasti.
Metóda posudzuje oblasť tak, ako bola vytvorená. Keď chcete
využiť rotáciu alebo posun niektorého robota, použite metódu
bodVOblasti
.
súradnicaBoduX
– x-ová súradnica bodusúradnicaBoduY
– y-ová súradnica bodutrue
– áno; false
– niepublic boolean bodV(Poloha r)
Zistí, či sa bod polohy robota nachádza v tejto oblasti. Metóda
posudzuje polohu bodu v oblasti v takom stave, ako bola
vytvorená. Keď chcete využiť rotáciu alebo posun niektorého
robota, použite metódu bodVOblasti
.
r
– robot, ktorého poloha je vyšetrovanátrue
– áno; false
– niepublic boolean myšV()
Zistí, či sa aktuálne súradnice myši nachádzajú v tejto oblasti.
Metóda posudzuje oblasť tak, ako bola vytvorená. Keď chcete
využiť rotáciu alebo posun niektorého robota, použite metódu
myšVOblasti
.
true
– áno; false
– niepublic boolean mysV()
Alias pre myšV
.
public double polohaX()
Vypočíta a vráti x-ovú súradnicu polohy stredu oblasti.
public double polohaY()
Vypočíta a vráti y-ovú súradnicu polohy stredu oblasti.
public double súradnicaX()
Vypočíta a vráti x-ovú súradnicu polohy stredu oblasti.
súradnicaX
v rozhraní Poloha
public double suradnicaX()
Alias pre súradnicaX
.
suradnicaX
v rozhraní Poloha
public double súradnicaY()
Vypočíta a vráti y-ovú súradnicu polohy stredu oblasti.
súradnicaY
v rozhraní Poloha
public double suradnicaY()
Alias pre súradnicaY
.
suradnicaY
v rozhraní Poloha
public Bod poloha()
Vypočíta a vráti polohu stredu oblasti.
public boolean jeNa(double x, double y)
Overí, či sa poloha tejto oblasti (t. j. súradníc jej stredu)
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 oblasti (t. j. súradníc jej stredu)
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 šírka()
Vráti šírku oblasti.
public double sirka()
Alias pre šírka
.
public double výška()
Vráti výšku oblasti.
public double vyska()
Alias pre výška
.