EINFÜHRUNG |
Du hast bereits im Kapitel Turtlegrafik die Turtle auf einem Drucker hochauflösend zeichnen lassen. Gleichartig kannst du ein Bild von GPanel auf dem Drucker rendern. Du kannst auch einen virtuellen Drucker verwenden, der eine Grafik-Datei in einem hochauflösenden Format (z.B. Tiff oder EPS) erstellt [mehr...Unter Windows eignet sich beispielsweise ImagePrinter]. Dazu definierst du eine parameterlose Funktion mit irgend einem Namen, beispielsweise doIt(), die alle Befehle zur Erstellung des Bildes enthält. Beim direkten Aufruf erscheint das Bild auf dem Bildschirm. Um es auszudrucken, rufst du printerPlot(doIt) auf. Du kannst auch noch einen Skalierungsfaktor k angeben, also printerPlot(doIt, k) aufrufen. Für k < 1 ergibt sich eine Verkleinerung, für k > 1 eine Vergrösserung. |
ROSETTEN |
from gpanel import * import math def rho(phi): return math.sin(n * phi) def doIt(): phi = 0 while phi < nbTurns * math.pi: r = rho(phi) x = r * math.cos(phi) y = r * math.sin(phi) if phi == 0: move(x, y) else: draw(x, y) phi += dphi n = math.sqrt(2) dphi = 0.01 nbTurns = 100 makeGPanel(-1.2, 1.2, -1.2, 1.2) doIt() printerPlot(doIt) |
MEMO |
Je nach der Wahl des Parameters n kannst du ganz verschiedenartige Kurven erzeugen. Versuche es mit natürlichen Zahlen, mit rationalen Zahlen (Brüchen) und mit irrationalen Zahlen (π, e). |
MAURER-ROSEN |
from gpanel import * import math def sin(x): return math.sin(math.radians(x)) def cos(x): return math.cos(math.radians(x)) def cartesian(polar): return [polar[0] * cos(polar[1]), polar[0] * sin(polar[1])] def rho(phi): return sin(n * phi) def doIt(): for i in range(361): k = i * d pt = [rho(k), k] corners.append(pt) move(cartesian(corners[0])) for pt in corners: draw(cartesian(pt)) corners = [] n = 3 d = 47 makeGPanel(-1.2, 1.2, -1.2, 1.2) doIt() printerPlot(doIt) |
MEMO |
Im Programm verwendest du Grad- und nicht Bogenmass. Darum ist es günstig, deine eigenen Funktionen für Sinus und Cosinus zu definieren, die mit Grad rechnen. Dies vereinfacht auch die Schreibweise, da du nicht immer math. davor schreiben musst. Ebenso ist es günstig, eine Umrechnung von Polar- auf kartesische Koordinaten in der Funktion cartesian() vorzunehmen, wo die Koordinatenpaare als Liste verpackt sind. Bekannte andere Maurer-Rosen kannst du mit folgenden Parametern zeichnen:
|
AUFGABEN |
|