Autorské riešenie
Úlohu je možné riešiť rôzne, uvedieme jednu z možností. Zuby ozubeného kolesa navrhujeme nakresliť ako obdĺžníky, ktoré majú jeden spoločný bod v strede šírky každého obdľžníka. Všetky obdĺžníky začneme kresliť z toho istého bodu, a každý nasledujúci bude otočený o uhol 360/počet požadovaných zubov.
Na kreslenie obdĺžníka so šírkou :s a dĺžkou :d vytvoríme procedúru:
;Imagine
logo
viem obdlznik :s :d ; parametre :s-sirka, :d-dlzka jedneho obdlznika polygon [ nechFv "cierna opakuj 2 [ do (:s/2) vl 90 do :d vl 90 do (:s/2) ] ] koniec Pri kreslení ozubeného kolesa postupujeme tak, že po nakreslení požadovaného počtu obdĺžníkov dookola nakreslíme kruh so stredom, kde sme začali kresliť aj obdĺžníky. Keďže zuby a vzdialenosti medzi zubami majú byť rovnaké, aby zuby dobre zapadli, preto obvod vnútorného kruhu môžeme určiť takto: k = počet zubov x 2 x šírka zuba Pre určenie obvodu kruhu platí vzťah: k = 2 x 3,14 x polomer Z toho vieme určiť polomer kruhu, ktorý bude tvoriť vonkajší kruh kolesa: polomer = (počet zubov x 2 x šírka zuba)/ 2 x 3,14 Dĺžka obdĺžníka pri kreslení ozubeného kolesa má byť väčšia ako polomer vnútorného kruhu práve o s/2, aby zuby susedných kolies dobre zapadli. Ostane ešte nakresliť vnútorný a stredný kruh kolesa s daným polomerom. Program v Imagine pre počet zubov :p a šírku jedného zuba :s môže vyzerať takto:
;Imagine
logo
viem koliesko :p :s ; parametre :p-pocet zubov, :s-sirka jedneho zuba ; vypocet dlzky jedneho zuba urobtu "polomer (:s * 2 * :p) / (2 * 3.141) ; kreslenie obdlznikov so zadanym poctom zubov opakuj :p [ obdlznik :s :polomer+:s/2 vl 360/:p ] ; kreslenie vnutornych kruhov bod 2*:polomer nechFp "biela bod :s nechFp "cierna koniec Riešenie v Pythone: Vo vzorovom riešení používame Pythonovskú korytnačiu grafiku s modulom turtle. Uprednostnili sme prístup import turtle pred prístupom from turtle import *, ktorý je síce stručnejší, ale je prehľadnejší pri práci s rôznymi objektami. Podobne ako v Imagine, aj v Pythone úlohu si môžeme rozdeliť: Vstupné parametre budú pocet - počet zubov ozubeného kolesa a s - šírka jedného zuba. Polomer určíme podobne, ako v Imagine: polomer = (s * 2 * :pocet) / (2 * 3.141) Funkcia obdlznik (sirka, vyska) rieši kreslenie jedného obdľžníka. Postup na kreslenie ozubeného kolieska je rovnaký, ako v Imagine. Riešenie v Pythone môže byť nasledovné:
#Úloha o kreslení ozubeného kolieska
import
turtle
k = turtle . Turtle ( ) p = turtle . Screen ( ) pocet = 12 s = 30 #Výpočet polomeru, dľžky jedného zuba polomer = ( s * 2 * pocet ) / ( 2 * 3.141 ) #Kreslenie jedného obdĺžníka def obdlznik ( sirka, dlzka ) : k. right ( 90 ) k. begin_fill ( ) for i in range ( 2 ) : k. forward ( sirka / 2 ) k. left ( 90 ) k. forward ( dlzka ) k. left ( 90 ) k. forward ( sirka / 2 ) k. end_fill ( ) k. left ( 90 ) #Kreslenie obdĺžníkov so zadaným počtom zubov for i in range ( pocet ) : obdlznik ( s, polomer + s / 2 ) k. left ( 360 / pocet ) #Kreslenie vnútorných kruhov k. dot ( 2 * polomer ) k. color ( "white" ) k. dot ( s ) p. mainloop ( ) Vaše zaujímavé riešenia a najčastejšie chyby Túto úlohu väčšina z vás vyriešila správne, v Imagine najkrajšie riešenie poslal tím nazov timu, oni dokonca určenie polomeru vnútorného kruhu riešili "roboticky", odmerali vnútornú vzdialenosť kolesa prechodom po jednom kroku cez nakreslené ozubené koleso a spočítali počet krokov. V Pythone najkrajšie riešenia poslali Šedá eminencia dodekahedrónov, tím krásny pstruh, LimeProgramming, Rúžové lentilky a Team.getName. Niektorí ste zuby kreslili ako slnečné lúče s hrubou čiarou, namiesto obdĺžníkov ste kreslili polooblúky, no v tom prípade zuby nezapadnú do seba dobre. Preto sme vám nemohli prideliť body za správne zapadajúce zuby, kde je rovnaká šírka otvoru a zuba. Používanie parametrov všetci ste zvládli, čo nás veľmi potešilo. Pozitívne hodnotíme, že ste prehľadne písali kódy programov a uviedli ste aj komentáre.
|
|||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |