Autorské riešenie [stiahni imp :
py]
Kým začneme vytvárať program na kreslenie kľúčika,
pozrime sa na to, aké vlastnosti by kľúčik mal mať. Podľa zadania platí, že
"Každý kľúč ma svoju veľkosť a nejakú štvor-kombináciu zúbkov a medzier."
O farbe kľúčika nemusíme uvažovať alebo ju necháme náhodnú.
Zaujímať nás bude len veľkosť a štvor-kombinácia zúbkov
a medzier. Veľkosťou určíme napr. veľkosť zúbka/medzery a tým aj veľkosť
celého kľúča. Štvor-kombináciu zúbkov a medzier je výhodné zadať ako
štvorprvkový zoznam 0 (=medzera) a 1 (=zúbok).
Riešenie úlohy je výhodné rozdeliť na menšia časti. Vytvorme
si procedúry/funkcie na
kreslenie zúbkov a medzier. Môžu vyzerať napr. takto:
;Imagine logo viem zub :dlzka polygon [
do :dlzka vp 30 do :dlzka
vp 120 do :dlzka vp 30
do :dlzka vp 90 do :dlzka
vp 90 ] koniec
viem medzera :dlzka
polygon [ opakuj 4 [
do :dlzka vp 90
] ] koniec
#Python def medzera(dlzka):
''' Nakresli medzeru so zadanou velkostou v strukture klucika
:param dlzka: velkost medzery :type dlzka: float :rtype: None '''
kor.begin_fill()
for i in range(4): kor.forward(dlzka) kor.right(90) kor.end_fill()
def zub(dlzka):
''' Nakresli zub so zadanou velkostou v strukture klucika
:param dlzka: velkost zubu :type dlzka: float :rtype: None ''' kor.begin_fill() kor. forward(dlzka) kor.right(30) kor.forward(dlzka) kor.right(120) kor.forward(dlzka) kor.right(30) kor.forward(dlzka) kor.right(90) kor.forward(dlzka) kor.right(90) kor.end_fill()
Teraz môžeme vytvoriť procedúru/funkciu na kreslenie
celého kľúčika.
;Imagine logo viem klucik :dlzka
:zuby urobTu "zuby vlozPr 0 :zuby urobTu "zuby
vlozPr 0 :zuby
nechFP ? vz :dlzka / 2
opakuj pocet :zuby [ ak2 prvok pocitadlo :zuby =
1 [ zub :dlzka
][ medzera :dlzka
] vp 90 do :dlzka
vl 90 ] vl 90 do :dlzka * pocet :zuby
vp 90 do :dlzka / 2 bod 4 * :dlzka
nechFP "biela bod :dlzka koniec
#Python def klucik(dlzka, zuby):
''' Nakresli klucik so zadanou velkostou a so zadanou strukturou zubov
:param dlzka: velkost klucika zadana ako velkost zubu :type dlzka: float :param zuby: struktura zubov, 1 = zub, 0 = medzera :type zuby: list :rtype: None ''' zuby = [0, 0] + zuby
farba = (rnd(), rnd(), rnd()) kor.fillcolor(farba) kor.color(farba)
kor.back(dlzka / 2)
for i in zuby:
if i == 1: zub(dlzka)
else: medzera(dlzka) kor.right(90) kor.forward(dlzka) kor.left(90) kor.left(90) kor.forward(dlzka * len(zuby)) kor.right(90) kor.forward(dlzka / 2) kor.dot(4 * dlzka) kor.dot(dlzka, "white")
Všimnime si, že v oboch prípadoch sme do zoznamu zúbkov
a medzier na začiatok vložili dve nuly (= dve medzery). Má to dve výhody.
Zúbky a medzery môžeme začať vykresľovať od budúcej dierky kľúčika a
zúbkovaná časť bude spojená s hlavičkou kľúčika.
Vaše zaujímavé riešenia a najčastejšie chyby
Najčastejšou chybou bolo, že kombináciu zúbkov a
medzier ste nezadali ako parameter procedúry/funkcie kľúčik. Buď ste ich
vykresľovali napevno alebo náhodne. Niektorí z vás neuvažovali ani o
možnosti zadať veľkosť kľúčika.
|