Rellotge analògic

Volem representar un rellotge analògic, que pugui guardar qualsevol hora del dia i dibuixar-se gràficament en una imatge, amb les agulles en la posició que correspongui.

  1. Dissenyeu la funció prepara_agulla que donada una imatge corresponent a una agulla del rellotge en posició vertical i apuntat cap amunt (a les 12), la posició del punt base de l’agulla en aquesta imatge (una tupla de dos enters), i les mides de la imatge resultant (una altra tupla amb l’amplada i l’alçada), crea i retorna una nova imatge de tipus 'RGBA'. La imatge retornada ha de consistir en una imatge de les mides indicades, amb tots els píxels blancs i totalment transparents, en la qual s’ha enganxat la imatge de l’agulla de manera que el punt base coincideixi amb el centre de la nova imatge.

    ../../../_images/Fig_prepara.png

    Exemple de prepara_agulla.

  2. Definiu la classe Rellotge, que permeti representar un rellotge analògic, que ha de disposar dels següents atributs:

    • hora: enter corresponent a l’hora de l’instant actual.

    • minuts: enter corresponent als minuts de l’instant actual.

    • im_esfera: imatge corresponent al fons del rellotge.

    • im_horaria: imatge corresponent a l’agulla horària.

    • im_minutera: imatge corresponent a l’agulla minutera.

    L’hora i minuts estan en el format de 24 hores, és a dir, les 0:00 són les dotze de la nit, les 10:30 són dos quarts d’onze del matí, les 18:05 són les sis i cinc de la tarda, etc. Les tres imatges tenen la mateixa mida i les de les agulles apunten a les 12 i ja tenen el fons transparent (com les retornades per prepara_agulla), per tal que les agulles puguin pivotar respecte al punt central de la seva imatge sense sortir dels límits de l’esfera.

    ../../../_images/Classe_rellotge.png

    Esquema d’un objecte de la classe rellotge.

    Definiu el mètode __init__, que ha de crear un rellotge a l’hora i minuts indicats i assignar les imatges de l’esfera i les agulles als atributs adients.

    En segon lloc, afegiu a la classe el mètode hora12, que retorna una tupla de tres components que indiquen l’instant en el format de 12 hores: (hora, minuts, s), essent hora i minuts dos enters i s un string que valdrà 'AM' o 'PM' depenent de si l’hora és anterior o posterior a les 12 del migdia.

  3. Completeu el mètode imatge de la classe Rellotge, que retorni una imatge del rellotge a l’instant que indica, amb les agulles a la posició correcta. Vigileu de no modificar l’atribut esfera, sinó que cal crear una imatge nova. En la imatge, l’agulla horària ha de quedar superposada a la de l’agulla minutera. Tingueu en compte que la posició de l’agulla horària depèn no només de l’hora, sinó també dels minuts; per exemple a les 10:32 l’agulla horària es troba entre les 10 i les 11.

    ../../../_images/R1947.png

    La figura de la dreta mostra una imatge d’un rellotge com les que ha de generar aquest mètode.