Autorské riešenie
[stiahni]

Riešenie tejto úlohy nie je náročné, aj keď v ňom použijeme trocha matematiky. Keď sa zamyslíme nad tým, ako pracuje korytnačí radar, riešenie by sme mohli slovne popísať napríklad takto:

opakuj nasledovné kroky:

  • natoč radar vhodným smerom,
  • zmeraj časy zachytenia odrazenej vlny,
  • z časov vypočítaj vzdialenosť slimákov ,
  • podľa vzdialeností a nastaveného polomeru sledovanej oblasti zobraz bodku na správnej pozícii na radare,

Postupne vyriešime jednotlivé časti.

Vieme, že elektromagnetická vlna je vyslaná v uhle 1°. Ak by sme radar medzi dvoma meraniami otáčali o menej ako 1°, mohlo by sa stať, že niektorého slimáka zameriame 2x. Ak by sme radar otáčali o viac ako 1°, mohlo by sa stať, že nejakého slimáka radar nezachytí. Radar preto budeme otáčať po každom meraní presne o 1°. Kostra procedúry spustiRadar by mohla vyzerať nasledovne:

viem spustiRadar
  opakujStale [
    urobTu "uhol pocitadlo
    nastavRadar :uhol
    ;zmeraj časy zachytenia odrazenej vlny
    ;z časov vypočítaj vzdialenosť slimákov
    ;podľa vzdialeností a nastaveného polomeru sledovanej oblasti
    ;zobraz bodku na radare,
  ]
koniec

Aj keď otáčame radar po 1°, môže sa stať, že nejakého slimáka zameriame 2x, resp. že ho nezameriame vôbec. Stane sa to vtedy, ak po otočení radaru sa aj slimák presunie z pôvodnej do novo zameriavanej oblasti, resp. sa presunie z novo zameriavanej do pôvodnej. Toto však nevieme nijako ovplyvniť.

Na meranie časov využijeme procedúru zmeraj, ktorá nám vráti zoznam časov zachytenia odrazov elektromagnetickej vlny. Zoznam môže obsahovať viac časov (v smere vlny bolo viac slimákov) alebo žiaden (v smere vlny nebol žiaden slimák).

viem spustiRadar
  opakujStale [
    urobTu "uhol pocitadlo
    nastavRadar :uhol
    urobTu "casy zmeraj
    ;z časov vypočítaj vzdialenosť slimákov
    ;podľa vzdialeností a nastaveného polomeru sledovanej oblasti
    ;zobraz bodku na radare,
  ]
koniec

Pre každý čas vypočítame vzdialenosť, v ktorej sa slimák nachádza. Zo známeho vzorca:
rýchlosť = dráha / čas si vyjadríme dráhu: dráha = rýchlosť x čas. Nezabudnime však na to, že zaznamenaný čas predstavuje čas, za ktorý sa odrazená vlna vrátila. Vlna teda prešla vzdialenosť k slimákovi a späť. Skutočná vzdialenosť k slimákovi je teda len polovičná.

viem spustiRadar
  opakujStale [
    urobTu "uhol pocitadlo
    nastavRadar :uhol
    urobTu "casy zmeraj
    prePrvky "cas :casy [
      urobTu "vzdialenost :cas / 2 * 299714532
      ;podľa vzdialeností a nastaveného polomeru sledovanej oblasti
      ;zobraz bodku na radare,
    ]
  ]
koniec

Nakoniec musíme rozhodnúť, či slimáka na radare zobraziť alebo nie. Záleží to od toho, akú veľkú oblasť chceme na radare zobrazovať (posúvač polomer) a ako ďaleko je od radaru slimák. Ak slimák patrí do sledovanej oblasti (:vzdialenost <= polomer'hodnota), vypočítame jeho pozíciu na radare a pomocou procedúry zobrazBodku ho zobrazíme. Výsledná procedúra teda môže vyzerať napr. takto:

viem spustiRadar
  opakujStale [
    urobTu "uhol pocitadlo
    nastavRadar :uhol
    urobTu "casy zmeraj
    prePrvky "cas :casy [
      urobTu "vzdialenost :cas / 2 * 299714532
      ak :vzdialenost <= polomer'hodnota [
        zobrazBodku :uhol :vzdialenost/polomer'hodnota * 200
      ]
    ]
  ]
koniec

Vaše zaujímavé riešenia a najčastejšie chyby

Najčastejšou chybou bolo, že čas ktorý vám vrátila procedúra meraj ste nepredelili 2. Vyšla vám tak dvojnásobná vzdialenosť než bola skutočná vzdialenosť slimáka od radaru. Často ste použili na ovládanie radaru nástroje, ktoré neboli dovolené. Dôsledkom bolo napr. aj to, že radar sa správal inak, ako by ste očakávali. Posledná vec, ktorá vám robila problémy bolo prepočítanie reálnej pozície slimáka na pozíciu bodky na obrazovke radaru.

Kvôli kontrole správnosti radaru sme pridali možnosť zobrazovania slimákov na obrazovke. Túto funkciu zapnete tak, že v procedúre posuvaj nastavíte premennej "vizualizacia hodnotu na "ano.