Prijavi problem


Obeleži sve katergorije koje odgovaraju problemu

Jos detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link
Na žalost nismo trenutno u mogućnosti da obradimo Vaš zahtev.
Molimo Vas da pokušate kasnije.

Programiranje grafike pomoću Pygame, priručnik za gimnaziju

Коришћење тригонометрије

Аналогни сат

Напиши програм који приказује аналогни сат.

Пошто сат треба да се аутоматски ажурира сваке секунде, користићемо тајмер који ће откуцавати сваке секунде. На сваки откуцај тајмера (али и на самом почетку рада програма) обезбеђиваћемо поновно исцртавање екрана. То можемо постићи коришћењем променљиве treba_crtati, како смо то раније описали (на почетку програма је постављамо на True, цртање вршимо само под условом да јој је вредност True и након цртања је постављамо на False, а на сваки откуцај тајмера постављамо је опет на True).

На почетку цртања одређујемо тренутно време. Време можемо представити бројем сати, минута и секунди. Дефинисаћемо променљиве које чувају те вредности. Функција datetime.datetime.now() враћа тренутно време (време системског сата рачунара на којем се програм извршава) у облику структуре чије поље hour садржи број сати (од 0 до 23), поље minute садржи број минута (од 0 до 59) и second садржи број секунди (од 0 до 59). Број сати можемо свести на интервал од 0 до 11 израчунавањем остатка при дељењу са 12.

Све важне тачке на сату (пре свега крајеви казаљки) налазе се на неком кругу. Координате тачке на кругу могу се одредити ако је познат центар круга (тачка са координатама (\(c_x\) , \(c_y\))), полупречник \(r\) и угао \(\alpha\) на којем се тачка налази. Угао ћемо мерити у односу на горњу тачку сата (подне) и претпоставићемо да угао расте у смеру казаљке на сату. Дефинисаћемо функцију tacka_na_krugu која прима четири броја који представљају координате центра, полупречник круга и угао у односу на позитиван смер у-осе (у степенима), а враћа пар бројева који представљају координате тачке на кругу. Координате тачака можемо одредити применом елементарне тригонометрије правоуглог троугла. Троугао \(AA_yO\) је правоугли, са правим углом код темена \(A_y\). Дужина хипотенузе \(OA\) је једнака полупречнику круга \(r\) док је угао \(A_yOA\) једнак \(\alpha\). Зато дужину наспрамне катете \(A_yA\) можемо израчунати као \(r \sin{\alpha}\). Пошто је то уједно и дужина \(OA_x\), x-координата тачке \(A\) се може израчунати као \(c_x + r \sin{\alpha}\). Веома слично се y-координата тачке \(A\) може израчунати као \(c_y - r \cos{\alpha}\) (јер оса y расте наниже).

../_images/sat.png

Кључни део задатка је да се на основу сати, минута и секунди одреде координате крајева казаљки. Претпоставићемо да се положај минутне и сатне казаљке мења сваког минута, а секундне казаљке сваког секунда. Пошто се казаљке крећу равномерном брзином, зависност између угла и броја сати, минута и секунди је линеарна. Угао се, дакле, може израчунати пропорцијом. Броју од 0 секунди одговара угао 0, док броју од 60 секунди одговара угао од 360 секунди. Дакле, угао секундне казаљке може се одредити дељењем броја секунди са 60 и множењем са 360. Веома слично се одређује и угао минутне казаљке. Што се тиче сатне казаљке, потребно је и преподневне и поподневне сате свести на интервал од 0 до 12, што се може урадити једноставим проналажењем остатка при дељењу бројем 12. Пошто желимо да се угао сатне казаљке одређује сваког минута, положај сатне казаљке одређиваћемо претварањем времена протеклог од поднева односно поноћи у минутима. Тај број се може добити множењем тренутног броја сати са 60 и сабирањем са тренутним бројем минута. Времену од 0 сати и 0 минута, тј. вредности од 0 минута, одговара угао од 0 степени, док углу од 12 сати и 0 минута, тј. вредности од 12·60 минута, одговара угао од 360 степени. Када је познат угао неке казаљке, могу се одредити координате њене завршне тачке коришћењем функције tacka_na_krugu, при чему се за центар круга узима центар сата, а полупречник круга се одређује на основу дужине казаљки (сатна казаљка је најкраћа и њена дужина износи око 70 процената полупречника сата, док су дужина секундне и минутне казаљке око 90 процената полупречника сата).