05. Geometria na kružnici
Last updated
Last updated
Na rozcvičenie, vytvorte program, ktorý vygeneruje 2 náhodné pozície na obrazovke, na prvú pozíciu vykreslí zelený krúžok, na druhú pozíciu červený krúžok. Použite vektory.
Rozšírte program tak, aby medzi týmito dvomi pozíciami nakreslil 5 menších bodov:
Program v Úlohe 1 funguje tak, že má daný počet dielikov a podľa neho vyrátava dĺžku jedného dieliku medzi a
a b
. Čo ak by sme chceli, aby bola pevne daná vzdialenosť dielikov a podľa nej by sme vypočítali počet dielikov?
Budeme potrebovať vypočítať dĺžku trasy medzi a
a b
a vydeliť ju dĺžkou jedného dielika.
Na výpočet celej dĺžky medzi a a b použijeme funkciu mag:
Potom vypočítame počet krúžkov ako celá deleno dĺžka dielika. A k tomu ešte pripočítame 1, lebo počet krúžkov je o 1 viac ako počet dielikov:
Tu je celý kód:
Doterajšie úlohy boli zamerané na pohyb a rozmiestňovanie bodov na úsečke, alebo smerom, ktorý je zarovnaný s osami X a Y. Napríklad takto sme vykreslili 10 čísel vedľa seba:
Keby sme chceli tieto čísla vypísať nie vedľa seba horizontálne, ale dokola na kružnicu, tak nám už doterajšie znalosti nevystačia a musíme sa naučit niečo nové. Skúste tento kód:
Doteraz sme na zadefinovanie pozície nejakého objektu používali súradnice x,y a vystačili sme si s tým. X znamenalo ako ďaleko je bod od ľavého okraja obrazovky. Y znamenalo ako ďaleko je bod od horného okraja obrazovky. Tomu sa hovorí aj pravouhlé alebo karteziánske súradnice:
Pri rozmiestňovaní bodov na kružnicu nám prídu vhod iné súradnice. Nie také, ktoré sú pravouhlé, ale také, ktoré vyjadrujú vzdialenosť bodu od stredu kružnice a uhol o koľko je bod otočený:
Súradnice, ktoré popisujú polohu bodu pomocou stredu kružnice, polomeru tejto kružnice a uhla na tejto kružnici, sa volajú aj polárne.
Ak máte takto pomocou stredu C, uhla u, a polomeru r vyjadrenú polohu bodu, tak vieme robiť veci ako:
otáčať bodom, ak meníme hodnotu uhla u.
približovať a vzdaľovať bod k stredu, ak meníme hodnotu polomera r.
Keď chceme vykresľovať na obrazovku, tak budeme ale tak či tak potrebovať z polárnych súradníc na kruhu prejsť do karteziánskych na obrazovke, lebo obrazovka pozostáva z pixelov v pravouhlej karteziánskej mriežke a Processing od nás očakáva súradnice príkazov ako rect()
, ellipse()
alebo text()
v tejto pixelovej mriežke.
Ak poznáme stred C, polomer r a uhol u, tak z toho vieme vypočítať hodnoty x,y na obrazovke nasledovne:
Tu je jednoduchý program na vyskúšanie. Meňte v programe hodnoty stredu polomeru r a uhla u a sledujte ako sa mení výsledok.
Nájdite také hodnoty u
a r
, aby ste umiestnili bod P na nasledujúce pozície:
Asi ste prišli na to, že na pravom okraji kružnice je uhol u = 0
. Na spodný okraj to bolo ťažšie nájsť, ale ak ste prišli na niečo ako u = 1.55
, tak ste skoro trafili.
Celý kruh dokola má 360°, ale Processing nefunguje v stupňoch. Processing funguje v tzv. radiánoch, alebo inými slovami, dokola celého kruhu nie je uhol veľký 360 ale je to uhol veľký 2*PI
. Polovica kruhu je PI
a štvrtina kruhu je PI/2
. Celý kruh má dokola 2*PI
a je to taký istý uhol ako 0
.
Keď už vieme, aký veľký uhol je dokola celej kružnice, môžeme tento uhol rozdeliť na rovnaké uhlové dieliky a rozmiestňovať objekty na kružnici:
Upravte predošlý program tak, aby namiesto krúžkov vypisoval čísla od 1 do 12
V predošlej úlohe ste vytvorili niečo ako ciferník hodín. Lenže ozajstné hodiny majú hore číslo 12 a tieto naše hodiny majú hore číslo 10. Potrebovali by sme pootočiť súradnice po kružnici tak, aby 12ka bola hore.
Keď vo výpočte súradníc:
Pridáme dovnútra funkcií cos
a sin
nejaký uhol navyše, docielime otočenie o tento uhol. Napríklad tu sme pridali uhol PI/4
, čo je 45°:
Skúšajte pridávať rôzne uhly. Do ktorého smeru otáčajú hodiny kladné uhly? Do ktorého smeru otáčajú kružnicu záporné uhly?
Vymyslite, o aký uhol potrebujeme pootočiť náš program, aby mali hodiny 12ku hore:
Keď vieme pridávaním uhla otáčať polohy bodov na kružnici, vieme tento pridávaný uhol v animácii aj meniť a docieliť tak otáčanie. Tu je jednoduchý skeč so setup()
a draw()
, ktorý vykreslí zatiaľ len statický bod:
Uhol u
môžem teraz v draw()
postupne zvyšovať a sledujme animáciu:
Upravte predošlý program tak, aby sa bod otáčal v opačnom smere a pomalšie:
Napíšte nový skeč, ktorý vykreslí na obvode kružnice 15 bodov. Pridajte do cos()
a sin()
animovaný uhol tak, aby sa otáčali:
Keď už vieme kružnicu, je jednoduché naučiť sa aj špirálu. Špirála je ako kružnica, ale postupne sa jej zväčšuje polomer. Začnime od programu z Úlohy 7:
A upravme tento program tak, aby polomer r
začínal nie na hodnote 150
, ale na 0
:
A postupne v draw()
ho budeme zväčšovať, podobne ako meníme u
:
Docielime tak, že sa bod nepohybuje po kružnici, ale po špirále:
Upravte Úlohu 8 tak, aby sa body nehýbali po kružnici, ale po špirále:
Už vieme, že ak si kruh rozdelíme na n
dielikov, tak vo for
cykle vieme vypočítať i-tu pozíciu v poradí takto:
Vieme tak vykresliť izolovaných n
bodov na kružnici. Čo ak ich chceme pospájať? To znamená, že nakresliť čiaru medzi i
-tym bodom a i+prvým
bodom.
Vytvoríme si druhú dvojicu súradníc a vypočítame ich polohu tak, že namiesto i
použijeme (i+1)
:
Vytvorte skeč, ktorý nakreslí po obvode kružnice n
bodov a pospája ich čiarami.
Vytvorte program, ktorý vykreslí päťuholník:
Upravte uhly tak, aby mal päťuholník vrchol nahor:
Keď sme chceli vypočítať nasledujúci bod po i
-tom bode, tak sme vo vzorci na výpočet súradníc zväčšili i
na i+1
. Ak by tieto body boli na špirále, tak musíme pri druhom bode zväčšiť aj r:
Upravte for
cyklus v programe tak, aby nešiel iba do i<n
ale až do i<3*n
. Čo to urobí so špirálou?
Skúšajte rôzne kombinácie počtu otáčok a hrúbky špirály dr
.