Instructions

6
7
Zeitdarstellun
g
bei Analo
g
uhren
Je nac
h
verwen
d
eter Mec
h
ani
k
gi
b
t es zwei untersc
h
ie
dl
ic
h
e Anzeigen
b
ei Ana
l
ogu
h
ren. Bei ec
h
ten ana-
lo
g
lau
f
enden Uhren
f
ührt der Minutenzei
g
er eine
g
leich
f
örmi
g
e Kreisbewe
g
un
g
aus, bei di
g
ital
g
esteuer
-
ten Uhren, wie zum Beispiel Bahnho
f
suhren, sprin
g
t er zur vollen Minute um eine
g
anze Minute weiter.
Letz teres Ver
f
ahren hat den Vorteil, dass die Uhrzeit besser au
f
einen Blick minutengenau abgelesen wer
-
den kann. Bruchteile von Minuten sind im Alltag normalerweise nicht wichtig. Wir verwenden
f
ür unser
Uhrenprogramm eben
f
alls dieses Ver
f
ahren. Der Stundenzeiger muss aber eine gleich
f
örmige Kreisbewe-
gung aus
f
ühren. Hier wäre es sehr be
f
remdlich und unübersichtlich, würde er jede volle Stunde um eine
ganze Stun
d
e weiter springen
.
h
m =
(
h + m / 60.0
)
* 5
D
ie Variable
hm
speichert den Winkel des Stundenzeigers in Minuteneinheiten,
wie sie im gesamten Programm verwendet werden. Dazu wird zur aktuellen Stunde 1/60 des Minutenwerts
addiert. In jeder Minute bewegt sich der Stundenzeiger um 1/60 einer Stunde weiter. Der errechnete Wert wird
mit
5
multipliziert, da der Stundenzeiger in einer Stunde fünf Minuteneinheiten auf dem Zifferblatt vor rückt.
if
s
1
<> s
:
Die Dauer eines Schleifendurchlaufs im Programm ist nicht bekannt. Für die Analoguhr bedeu
-
tet dies, dass die Grafi k nicht bei jedem Schleifendurchlauf aktualisiert werden muss, sondern nur, wenn die
aktuelle Sekunde eine andere ist als die zuletzt gezeichnete. Dazu wird später im Programm die gezeichnete
Se
k
u
n
de
in
de
r V
a
ri
ab
l
e
n
s1
gespeichert, die aktuelle Sekunde steht immer in der Variablen
s
.
Wenn sich die Sekunde gegenüber der zuletzt gezeichneten verändert hat, wird mit den folgenden
Anweisungen die Grafi k der Uhr aktualisiert. Hat sie sich nicht verändert, braucht die Grafi k nicht aktualisiert
zu werden, und die Schleife startet von Neuem mit einer weiteren Abfrage der aktuellen Systemzeit.
pygame.draw.circle
(
FELD, WEISS, MP, 182
)
Als Erstes wird eine weiße Kreisfl äche gezeichnet, die die Uhrzeiger restlos überdeckt. Der Radius ist mit 182
Pixeln etwas größer als der längste Zeiger, damit keine Reste davon mehr stehen bleiben. Einen vollfl ächigen
Kreis zu zeichnen ist deutlich einfacher, als den zuletzt gezeichneten Zeiger wieder pixelgenau zu überma len.
pygame.draw.line
(
FELD, SCHWARZ, MP, punkt
(
120, hm
)
, 6
)
Diese Zeile zeichnet den Stundenzeiger als Linie mit einer Breite von
6
Pixeln vom Mittelpunkt aus
120
Pix
e
l
lang in dem Winkel, der durch die Variable
h
m angegeben wird. Die Funktion pygame.draw.line
()
w
u
r
de
b
i
s-
her nicht verwendet. Sie benötigt fünf Parameter
:
Su
rf
ace
gibt die Zeichenfl äche an, auf der gezeichnet wird, im Beispiel das
FELD
.
F
a
r
be
gibt die Farbe des Kreises an, im Beispiel die zuvor defi nierte Farbe
SC
HWARZ
.
Anfangspunkt
gibt den Anfangspunkt der Linie an, im Beispiel den Mittelpunkt der Uhr
.
t
Endpunkt
gibt den Endpunkt der Linie an, im Beispiel wird dieser mit der Funktion
t
punkt
()
aus dem
Winkel des Stundenzeigers errechnet
.
Dicke
g
ibt die Linienstärke an.
10145-5 Raspberry Pi verstehen und anwenden_01.indd 6710145-5 Raspberry Pi verstehen und anwenden_01.indd 67 30.06.2017 10:09:3630.06.2017 10:09:36