De math module1 uit de Python Standard Library bevat tal van goniometrische functies2 die je voor deze opgave goed zult kunnen gebruiken. Let er ook op dat deze functies werken met hoeken die uitgedrukt zijn in radialen. Voor de conversie van graden naar radialen en omgekeerd, ondersteunt de math module dan ook de functies math.radians3 en math.degrees4. Hieronder alvast een voorproefje
>>> from math import pi, sin, degrees, radians
>>> radians(180)
3.141592653589793
>>> degrees(pi)
180.0
>>> sin(degrees(180))
0.5715301650260188
Een zonnewijzer is een instrument om de tijd aan te wijzen op basis van de stand van de zon. Bij een horizontale zonnewijzer werpt de zon de schaduw van de stijl van de zonnewijzer op een horizontaal oppervlak waarop verschillende lijnen de uren van de dag aangeven. De aarde draait immers om haar as en daardoor verandert de schaduw van de stijl voortdurend van richting. Als de schaduw naar het noorden wijst (op het zuidelijk halfrond naar het zuiden) is het precies middag. De zon staat dan in het zuiden (op het zuidelijk halfrond in het noorden) en in haar hoogste stand, precies boven de meridiaan. Het is dan 12 uur in lokale zonnetijd. Van daaruit kan men een verdeling maken en uurlijnen aanbrengen waarop de schaduw het uur aanduidt. De oudste zonnewijzer die we kennen werd in Egypte gevonden en dateert van omstreeks 1500 voor Christus.
Omdat het oppervlak van een horizontale zonnewijzer horizontaal ligt, roteert de schaduw niet op een uniforme manier over het oppervlak. Het is overigens niet zo dat het passeren van de zon over de meridiaan altijd precies om 12 uur gebeurt. Omdat de aarde wordt ingedeeld in tijdszones, geldt dit enkel op de centrale meridiaan van de tijdzone. Daarom gebeurt de verdeling van de uurlijnen op de zonnewijzer op basis van de regel \[\tan(\theta) = \sin(\lambda) \times \tan(\alpha)\] waarbij $$\lambda$$ staat voor de lengtegraad van de zonnewijzer, en $$\theta$$ de hoek op het oppervlak aangeeft tussen een gegeven uurlijn en de uurlijn voor het middaguur (die altijd naar het ware Noorden wijst). De parameter $$\alpha$$ staat voor de uurhoek van de zon, en wordt op uur $$t$$ (relatief ten opzichte van het middaguur) berekend als $${15}^{\circ} \times t - \Delta$$, waarbij $$\Delta$$ het verschil is tussen de breedtegraad $$\phi_z$$ van de zonnewijzer en de breedtegraad $$\phi_c$$ van de centrale meridiaan van de lokale tijdszone. Op de centrale meridiaan van de lokale tijdszone is de hoek $$\theta$$ van de lijn voor drie uur in de namiddag bijvoorbeeld gelijk aan de boogtangens van $$\sin(\lambda)$$, omdat $$\tan({45}^{\circ}) = 1$$.
Drie regels met daarop respectievelijk de lengtegraad $$\lambda \in \mathbb{R}$$ ($$-180 \le \lambda \leq 180$$) en breedtegraad $$\phi_z \in \mathbb{R}$$ ($$-90 \leq \phi_z \leq 90$$) van de zonnewijzer, en de breedtegraad $$\phi_c \in \mathbb{R}$$ ($$-90 \leq \phi_c \leq 90$$) van de centrale meridiaan van de lokale tijdszone. Lengte- en breedtegraden worden hierbij aangeduid als decimale graden.
Een regel met daarop het uur, de uurhoek van de zon (in graden), en de hoek van de uurlijn op een horizontale zonnewijzer (in graden), en dit voor elk uur van de dag, gaande van zes uur in de voormiddag tot zes uur in de namiddag. Als de zon ondergaat wordt een zonnewijzer immers een hoogst onnuttig instrument om de tijd aan te geven. Bekijk onderstaand voorbeeld om het formaat af te leiden waarmee deze informatie moet uitgeschreven worden.
Invoer:
-4.95
-150.5
-150.0
Uitvoer:
uur: -6; uurhoek (zon): -89.5; hoek (uurlijn): 84.22483260136025
uur: -5; uurhoek (zon): -74.5; hoek (uurlijn): 17.2829335027853
uur: -4; uurhoek (zon): -59.5; hoek (uurlijn): 8.333711921468085
uur: -3; uurhoek (zon): -44.5; hoek (uurlijn): 4.846708924373172
uur: -2; uurhoek (zon): -29.5; hoek (uurlijn): 2.7948738093186436
uur: -1; uurhoek (zon): -14.5; hoek (uurlijn): 1.2783529809190628
uur: 0; uurhoek (zon): 0.5; hoek (uurlijn): -0.04314426995813971
uur: 1; uurhoek (zon): 15.5; hoek (uurlijn): -1.3707878431870526
uur: 2; uurhoek (zon): 30.5; hoek (uurlijn): -2.909643210076617
uur: 3; uurhoek (zon): 45.5; hoek (uurlijn): -5.018023174356127
uur: 4; uurhoek (zon): 60.5; hoek (uurlijn): -8.671396957302383
uur: 5; uurhoek (zon): 75.5; hoek (uurlijn): -18.450999222565326
uur: 6; uurhoek (zon): 90.5; hoek (uurlijn): 84.22483260136018