Autorské riešenie
V Korytnačkove sa terč skladá z troch, do seba vnorených, kružníc s polomermi r, r/2 a r/4. Menšia kružnica je vo väčšej umiestnená náhodne. Vieme, že polomer menšej kružnice je o polovicu menší ako polomer väčšej kružnice. Preto ak chceme, aby menšia kružnica bola vnorená a mala náhodný stred, môžeme tento náhodný stred hľadať od stredu väčšej kružnice len do vzdialenosti polomeru menšej kružnice. Obrázok ukazuje rozsah vzdialenosti stredu väčšej kružnice k náhodnému stredu menšej kružnice. V obrázku predstavuje r polomer väčšej kružnice a r/2 polomer menšej kružnice. Terče v Korytnačkove sú kreslené pomocou umeleckých kružníc, kde body po obvode kružnice majú priemer 4. Nechceme, aby sa okraje kružníc prekrývali, preto potrebujeme z rozsahu možných pozícií stredov menšej kružnice odpočítať číslo 4 ako polovica priemeru bodu väčšej kružnice plus polovica priemeru bodu na menšej kružnici. Na začiatku si vytvoríme pomocnú funkciu prejdi_na _nahodny_stred, ktorá posunie korytnačku zo stredu väčšej kružnice do stredu menšej kružnice. Funkcia prejdi_na _nahodny_stred bude mať ako parameter polomer menšej kružnice. Na hľadanie náhodnej pozície stredu použijeme funkciu uniform z knižnice random. Náhodnú pozíciu stredu menšej kružnice vypočítame pomocou náhodného uhla a náhodného počtu krokov v rozsahu od 0 po polomer menšej kružnice mínus 4. # Python def prejdi_na_nahodny_stred(polomer): nahodny_uhol = random.uniform(0, 360) nahodny_pocet_krokov = random.uniform(0, polomer - 4) pero.left(nahodny_uhol) pero.forward(nahodny_pocet_krokov) Majka naprogramovala umeleckú kružnicu tak, že sa začína kresliť po obvode kružnice. Potrebujeme sa, preto z náhodného stredu dostať na obvod kružnice. Vytvoríme funkciu kresli_kruznicu_zo_stredu, ktorá posunie korytnačku zo stredu kružnice na jej obvod, vykreslí kružnicu a následne posunie korytnačku opäť do stredu kružnice. # Python def kresli_kruznicu_zo_stredu(polomer): pero.penup() pero.forward(polomer) pero.left(90) pero.pendown() kresli_kruznicu(polomer) pero.penup() pero.right(90) pero.forward(-polomer) pero.seth(0) Na záveru vytvoríme funkciu kresli_terc, ktorá vykreslí najväčšiu kružnicu, prejde na náhodný stred s polomerom r/2, vykreslí strednú kružnicu, prejde do stredu najmenšej kružnice s polomerom r/4 a túto kružnicu vykreslí. Výsledný program vyzerá nasledovne: # Python import turtle import random def kresli_kruznicu(polomer): sirka = 4 pocet_casti = int(2 * 3.141592653589793 * polomer / sirka) farba = pero.color() mod = tabula.colormode() red, green, blue = random.uniform(0, mod), \ random.uniform(0, mod), \ random.uniform(0, mod) zmena = random.randrange(0, 3) for i in range(pocet_casti): pero.penup() pero.circle(polomer, extent=360 / pocet_casti) pero.pendown() if zmena == 0: pero.color(random.uniform(0, mod), green, blue) elif zmena == 1: pero.color(red, random.uniform(0, mod), blue) else: pero.color(red, green, random.uniform(0, mod)) pero.dot(sirka) pero.color(*farba) def prejdi_na_nahodny_stred(polomer): nahodny_uhol = random.uniform(0, 360) nahodny_pocet_krokov = random.uniform(0, polomer) pero.left(nahodny_uhol) pero.forward(nahodny_pocet_krokov) def kresli_kruznicu_zo_stredu(polomer): pero.penup() pero.forward(polomer) pero.left(90) pero.pendown() kresli_kruznicu(polomer) pero.penup() pero.right(90) pero.forward(-polomer) pero.seth(0) def kresli_terc(polomer): kresli_kruznicu_zo_stredu(polomer) prejdi_na_nahodny_stred(polomer / 2) kresli_kruznicu_zo_stredu(polomer / 2) prejdi_na_nahodny_stred(polomer / 4) kresli_kruznicu_zo_stredu(polomer / 4) tabula = turtle.Screen() pero = turtle.Turtle() pero.hideturtle() pero.speed(0) tabula.delay(0) polomer = 100 kresli_terc(polomer) tabula.mainloop() Vaše najčastejšie chyby a zaujímavé riešenia Medzi najčastejšie chyby patrilo:
|
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |