EINFÜHRUNG |
Für exaktes Zeichnen eignet sich ein Drucker besser als der Bildschirm, da ein Drucker meist eine weit höhere Auflösung hat, beispielsweise 1200x1200 dpi gegenüber den üblichen Bildschirmauflösungen von ungefähr 100 dpi. Das Ausdrucken einer GPanel-Grafik erfolgt so, dass die Grafikoperationen statt auf dem Bildschirm auf dem Drucker dargestellt werden. Damit lassen sich hochauflösene Vektorgrafiken erstellen. Dazu definiert man eine Funktion mit irgend einem Namen, die alle Befehle zur Erstellung des Bildes enthält. Beim direkten Aufruf erscheint das Bild auf dem Bildschirm. Um es auszudrucken, ruft man printerPlot() mit dem Funktionsnamen auf. Es wird ein Druckerdialog angezeigt, in dem man den Drucker auswählen und seine Eigenschaften einstellen kann. Du kannst so auch auf virtuelle Drucker ausgeben, die eine Grafik-Datei in einem hochauflösenden Format (z.B. Tiff oder EPS) erstellen [mehr...Unter Windows eignet sich beispielsweise ImagePrinter]. |
EIN NICHT FEUERSPEIENDER DRACHEN |
Es geht ja hier ums Drucken und deshalb verwendest du eine vorgegebene Funktion figure(s, n, flag), um die Kurve zu zeichnen. Immerhin siehst du, dass die Kurve rekursiv definiert ist und sich selbst sogar zweimal, allerdings mit kleinerer Ordnung n-1 aufruft. Zudem verwendet die Funktion einen Parameter flag, der 1 oder -1 sein kann und bestimmt, in welcher Richtung gezeichnet wird. Um das Bild auszudrucken, erstellst du es in der Funktion doIt(), die keine Parameter haben darf. Wenn du doIt() ganz normal aufrufst, so erscheint die Zeichnung auf dem Bildschirm. Wenn du printerPlot(doIt) aufruftst, also dem Befehl printerPlot() den Namen doIt übergibst, wird die Zeichnung (ohne die Turtle zu zeigen) ausgedruckt. from gturtle import * import math nbGenerations = 12 def doIt(): rt(90) figure(300, nbGenerations, 1) def figure(s, n, flag): if n == 0: fd(s); else: alpha = 45 if flag == 1: alpha = -alpha flag = -flag lt(alpha) figure(s / math.sqrt(2), n - 1, -flag) rt(2 * alpha) figure(s / math.sqrt(2), n - 1, flag) lt(alpha) makeTurtle() ht() setPos(-100, 100) # screen doIt() setPos(100, 0) # printer printerPlot(doIt)
|
MEMO |
Du musst mit setPos() die Zeichnung auf dem Blatt richtig positionieren. Je nach Grösse des Turtlefensters und dem verwendeten Drucker, wird sich diese Position ändern. Du kannst beim Aufruf von printerPlot() auch noch einen Skalierungsfaktor k angeben, also printerPlot(doIt, k), der für k > 1 das Bild vergrössert und es für k < 1 verkleinert. |
AUFGABEN |
|