225
Blau/Rot/Blau in einer Schleife
>>> color(0.6, 0, 0.4)
>>> fd(100); rt(90)
>>> color(0.4, 0, 0.6)
>>> fd(100); rt(90)
>>> color(0.2, 0, 0.8)
>>> fd(100); rt(90)
Blau/Rot/Blau in einer Schleife
Damit können wir uns schon einen Plan für die Färbung unseres 36-seiti-
gen Polygons machen:
0
Wir färben jede Polygonseite mit einer Farbe, bei der der Rot-Anteil und
der Blau-Anteil zusammen 1 ergeben. Der Grün-Anteil ist 0. Das ma-
chen wir so, dass wir zuerst
blau
berechnen und daraus
rot = 1 –
blau
.
0
Wir beginnen mit einer blauen Seite. Farben: 0, 0, 1.
0
Nach 18 Segmenten (dem halben Polygon) sollten wir bei Rot, also den
Farben 1, 0, 0, angelangt sein. Dazu müssen wir von Segment zu Seg-
ment den Blau-Anteil um 1.0/18 verringern. Die Änderung des Blau-
Anteils ist eine negative Zahl.
0
Dann geht es umgekehrt weiter, der Blau-Anteil steigt wieder. Die Än-
derung des Blau-Anteils ist eine positive Zahl, nämlich die entgegenge-
setzte Zahl von vorher.
Farbmischungen.
Rot ist dunkel, Blau heller
dargestellt.
226
Mehr Schleifen: Friedenslogo, Superrosette
Kapitel
8
0
Damit müssen wir in
n_eck()
doch einige Änderungen vornehmen:
def n_eck(eckenzahl, seitenlaenge):
drehwinkel = 360 / eckenzahl
blau = 1
aenderung = -2 / eckenzahl
for i in range(eckenzahl):
rot = 1 - blau
pencolor(rot,0,blau)
forward(seitenlaenge)
left(drehwinkel)
if i == eckenzahl // 2:
aenderung = -aenderung
blau = blau + aenderung
Einiges davon ist einfach zu verstehen: bevor die Schleife beginnt, setzen
wir
blau
auf 1.0 und berechnen die
aenderung
, die bei jedem Schleifen-
durchgang erfolgen muss.
Im Schleifenkörper wird
rot
berechnet und
pencolor()
aufgerufen. Am
Ende des Schleifenkörpers wird
blau
geändert. Doch was bewirkt die vor-
letzte Anweisung im Schleifenkörper: die
if
-Anweisung?
Sie prüft, ob schon etwa die Hälfte der Polygonstrecken gezeichnet ist.
Wobei hier der Divisionsoperator
//
verwendet wird, der eine Ganzzahl-
Division ausführt. Warum? Die Ganzzahl-Division liefert immer ein ganz-
zahliges Ergebnis
>
Mach mit!
>>> 36 // 2
18
>>> 35 // 2
17
>>> 35 / 2
17.5
Du siehst: bei ungerader Eckenzahl würde mit der normalen Division für die
ganzzahlige Schleifenvariable die Bedingung
i == eckenzahl / 2
nie-
mals erfüllt sein.
In unserem Fall ist die Bedingung für den Wert 18 von
i
wahr. In diesem
Schleifendurchgang wird
aenderung
durch
–aenderung
ersetzt! Damit ist
nun der Wert von
aenderung
, der vorher negativ war, positiv! Und der
Blau-Anteil nimmt wieder zu.

Get Python für Kids now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.