Autorské riešenie
Podľa zadania úlohy máme vykresliť špeciálne trojfarebné terče. Z textu zadania a z nižšie uvedeného obrázka sa dá vidieť, že tieto terče sa vzájomne líšia v niekoľkých parametroch:
Pri riešení tohto komplexnejšieho problému nám pomôže vyriešenie jednoduchšieho podproblému, a to vykreslenie obrysu jednej vrstvy terča. Veľmi užitočnou pomockou pre nás je grafický náčrt obrysu jednej vrstvy terča (pozri obrázok nižšie).
Z náčrtu môžeme odpozorovať, že pri skrátení dĺžky strany mnohouholníka na 0, by sme ako obrys vrstvy dostali kružnicu tvorenú z jednotlivých rovnako veľkých kružnicových oblúkov. Veľkosť uhla jedného kružnicového oblúka je vyjadrená podielom 360 / pocet_stran. Dĺžka polomera kružnicových oblúkov so stredom v okrajových bodoch mnohouholníka je rovná´hodnote parametra polomer_obluka. Funkcia vrstva_obrys na vykreslenie obrysu jednej vrstvy tvorenej mnohouholníkom so zadaným počtom strán, dĺžkou strany a dĺžkou polomeru kružnicového oblúka môže vyzerať nasledovne: def vrstva_obrys(pocet_stran, dlzka_strany, polomer_obluka): for _ in range(pocet_stran): pero.forward(dlzka_strany) pero.circle(polomer_obluka, 360 / pocet_stran) Ak by sme namiesto obrysu vrstvy chceli vykresliť vrstvu vyfarbenú zadanou farbou, stačí len mierne upraviť funkciu vrstva_obrys na funkciu kresli_vrstvu s nižšie uvedeným programovým kódom: def kresli_vrstvu(pocet_stran, dlzka_strany, polomer_obluka, farba): pero.fillcolor(farba) pero.begin_fill() for _ in range(pocet_stran): pero.forward(dlzka_strany) pero.circle(polomer_obluka, 360 / pocet_stran) pero.end_fill() Ak vieme vykresliť jednu vrstvu terča, tak na vykreslenie terča s viacerými vrstvami použijeme cyklus. Tu však musíme brať do úvahy, že vrstvy musíme kresliť od najväčšej vrsvy po prostrednú vrstvu (s mnohouholníkom) a musíme pravidelne striedať tri farby tak, aby sme skončili hnedou farbou pri vykreslení mnohuholníka na prostrednej vrstve. Výsledný program (farebny_terc.py) môže vyzerať napr. nasledovne: import turtle def kresli_vrstvu(pocet_stran, dlzka_strany, polomer_obluka, farba): pero.fillcolor(farba) pero.begin_fill() for _ in range(pocet_stran): pero.forward(dlzka_strany) pero.circle(polomer_obluka, 360 / pocet_stran) pero.end_fill() def posun_dnu(rozstup): pero.penup() pero.left(90) pero.forward(rozstup) pero.right(90) pero.pendown() def kresli_terc(pocet_vrstiev, pocet_stran, dlzka_strany, rozstup): farby = ['brown', 'orange', 'yellow'] for idx in range(pocet_vrstiev - 1, -1, -1): farba = farby[idx % len(farby)] kresli_vrstvu(pocet_stran, dlzka_strany, idx * rozstup, farba) posun_dnu(rozstup) platno = turtle.Screen() pero = turtle.Turtle() kresli_terc(8, 3, 80, 20) platno.mainloop() Táto úloha je zameraná na:
Vaše zaujímavé riešenia a najčastejšie chyby Do riešenia úlohy sa zapojilo 3 tímy z kategórie EXPERT. Plný počet bodov získali tímy raketak a takacpisko, ktorým gratulujeme. V riešeniach sme zaregistrovali nasledovné nedostatky, vychádzajúce najčastejšie z nedôslednej analýzy problému:
|
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |