Computergrafik-Übungen W. Kurth, T.Mangoldt WS 2003/04

Ähnliche Dokumente
PostScript -Sprache. Frank Richter

Einführungskurs PostScript

Werkzeuge der Informatik

Einführungskurs PostScript, Teil 3

Werkzeuge der Informatik

Vortrag Postscript, Einführung, Koordinatgeometrie und Prozeduren

Versteht mich mein Drucker? Die Universaldruckersprache PostScript

Schriftschnitte in PostScript

METAFONT vs PostScript 41

Vom T E X-Dokument zur Druckerei

METAFONT vs PostScript

VL8: Von ASCII nach Postscript. Inhalt. 1. Einleitung. 2.Postscript-Programme

= > ! " # $ % & 050 ( ) + - I r _

A ASCII-Tabellen 215. BUd A-J: ASClI-TabeUe[ur norma Ie Textfonts, z. B.»Times-Roman«

PostScript spielt MASTER MIND

Semantischer Verlauf. Experiment zur Sprache der digitalen Gestaltung Kai Jauslin. Semantischer Zerfall.indd :06:36

2

Logo-Aufgaben mit Verbindung zur Mathematik

Grafiken dynamisch erzeugen in HTML5. Canvas. kurz & gut. David Flanagan O REILLY. Übersetzung von Lars Schulten

Füllen von Primitiven

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

6 Graphische Darstellungen mit Matplotlib

C.3 Funktionen und Prozeduren

Diese geometrischen Formen (Linien oder Flächen oder Text) in sechs Kategorien können Sie auf die Zeichenfläche zeichnen:

4.2 Selbstdefinierte Matlab-Funktionen 1. Teil

Turtlegrafik in Logo

Freude mit Graphik und vielfältigen Konstrukten. Hinrich E. G. Bonin August 2006

Übung: Abhängigkeiten

Einführung in die Praktische Informatik. Übungsblatt 2. PD Dr. U. Köthe Heidelberg, 27. Oktober [7 Punkte]

Lektion 4: Prozeduren mit Parametern

Verschiebung/Streckung von Funktionsgraphen. Verwenden von Schablonen zum Zeichnen von Funktionsgraphen. Idee der Koordinatentransformation

Lösungsvorschlag zur 3. Übung

C-Pointer (Zeiger, Adressen) vs. C++ Referenzen

Die Turtle im Koordinatensystem 1

Grafikeinbindung in LaTeX

Lektion 6: Prozeduren mit Parametern Übergabe von Werten

Bland-Altman-Plot in Excel 2010 erstellen

Lektion 3: Wiederholungen

Sinus und Cosinus. Ich kann zu vorgegebenen Daten eine Sinusfunktion entwickeln, die diese Daten näherungsweise beschreibt.

Computergraphik Grundlagen

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Daniel S. Steingrube Institut für Quantenoptik Leibniz Universität Hannover.

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Einführung in Matlab, 2. Teil

Inventor. C:\Dokumente und Einstellungen\Administrator\Desktop\COMENIUS_Juni2005\Inventor01_D.doc Seite 1

6 Trigonometrische Funktionen

Programmieren mit xlogo

Tutorial 002 Erstellen von Diagrammen nach den Vorgaben des CD

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift

Trigonometrische Funktionen

Lösung IV Veröffentlicht:

Grafikformate 2

1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster

Tipps und Tricks zu Word. Flickflauder.ch Webdesign/Webprogramming. Mail:

Objektorientierte Programmierung

Übersicht Shell-Scripten

Unterlagen zur. CAD-Schulung. Inhalt. Benutzeroberfläche Tastenkombinationen Funktionstasten Flansch Drehteil Schriftfeld

Überblick über die Winkelfunktionen Sinusfunktion

Experimente mit trigonometrischen Funktionen

Excel 2010 Werte aus einer Liste wählen

Vorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 4A

WiMa-Praktikum 1. Woche 8

Digitale Typografie (SS 2016)

Übungen mit dem Applet Kurven in Polarkoordinaten

Inhalt. Anleitung PDF Tools. Artikel anlegen

Übungen mit dem Applet Grundfunktionen und ihre Ableitungen

Funktionen lassen sich durch verschiedene Eigenschaften charakterisieren. Man nennt die Untersuchung von Funktionen auch Kurvendiskussion.

Programmieren in MATLAB Mehr als nur ein Taschenrechner

Trigonometrische Kurven / Funktionen

ICS Font/Symbol Utilities (INTERLIS Tools / GeoShop)

WWG Grundwissen Mathematik 10. Klasse

4 Grundlagen zu SVG-Karten und -Diagrammen...33

Dynamische Geometrie

pue08 December 9, 2016

Bash-Skripting Linux-Kurs der Unix-AG

syntax.tex Eine Übersicht

Kennen, können, beherrschen lernen was gebraucht wird

Modul 5: Übungen zu - Übernahme von Text, Grafiken und anderen Objekten

Übungsblatt 2. Abgabe: Freitag, 7. November 2014, 18:00 Uhr

FAKULTÄT FÜR INFORMATIK

19. Funktional-reaktive Programmierung

floatchart Flußdiagramme in TEX/L A TEX

JavaFX Koordinaten und Transformationen

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

6.2 Scan-Konvertierung (Scan Conversion)

8. Schritt Die erste Seite ist fertig Schritt Die zweite Seite gestalten... 6 Die Seitenzahl einfügen... 6

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

3.2. Polarkoordinaten

Übungen mit dem Applet Kurven in Parameterform

Kurzanleitung Hama Photokalender v

Schülerworkshop Computertomographie Mathematik als Schlüsseltechnologie

Dokumentation. Gnuplot

2. Fraktale Geometrie

Prinzipien der objektorientierten Programmierung (OOP)

Grafiken Teil 2. LATEX-Kurs der Unix-AG. Klaus Denker. 18. Juni 2012

Berechenbarkeit und Komplexität Vorlesung 11

Möbiustransformationen

Uli Merkel Kurzinfos: RTF erstellen. Umsetzung von UNIFACE- Frames in RTF-Dateien

edocprintpro - AutoPrint Plugin - automatischer PDF Druck auf physische Drucker

Nullpunkte und Nullpunktverschiebungen

Transkript:

Computergrafik-Übungen W. Kurth, T.Mangoldt WS 2003/04 Einführungskurs PostScript, Teil 2 Lösungen der Übungsaufgaben aus Teil 1: 1. Quadratzahlen mit alternierender Farbe untereinander schreiben /Times-Roman findfont 16 scalefont setfont 40 830 moveto % nach oben gehen /schreibe % Prozedurdeklaration 8 string cvs % ob. Stackelement in String % konvertieren dup % diesen String doppeln... stringwidth % und durch seine Laenge und % Hoehe ersetzen pop % Hoehe vom Stack entfernen neg % Vorzeichen der Laenge % aendern... -20 rmoveto % und als 1. Argument fuer % rmoveto nehmen show % String ausgeben 1 % Startwert 20 % Argument fuer repeat dup dup mul % ob. Stackelem. 2 x doppeln, % quadrieren dup 2 mod 0 eq % Test, ob gerade Zahl 1 0 0 setrgbcolor } % rot, wenn gerade 0 0 0 setrgbcolor } % sonst schwarz ifelse schreibe % Quadratzahl ausgeben als String 1 add % aktuelle Zahl inkrementieren Zweite Variante: mit for-schleife for stellt Laufvariable bereits auf dem Stack zur Verfügung! Somit Hauptblock nur noch: 1 1 20 dup dup mul dup 2 mod 0 eq 1 0 0 setrgbcolor } 0 0 0 setrgbcolor } ifelse

schreibe } for 2. Regelmäßiges hexagonales Gitter Lösung 1: "Dreibein" als Elementarzelle, die in 2 Richtungen verschoben und repliziert wird. Zur Vereinfachung der "lineto"-befehle verwenden wir die Seitenlänge 1 und vergrößern alles: 20 20 scale 0.05 setlinewidth 10 gsave 10 2 40 moveto 3 0 1 rlineto 0-1 rmoveto 120 rotate % Faktor für äußeres repeat % Grafikzustand sichern % Faktor für mittleres repeat % Anfangsposition % innerstes repeat % Dreibein wird gezeichnet % Beginn Verschiebung -120 rotate % Drehung des Koord.syst. 0 1 translate 60 rotate 0 1 translate 60 rotate % Verschiebung... % Ende Verschiebung % zeichne im neuen Koord.syst. dasselbe grestore % alten Ursprung wiederherstellen

-120 rotate % wieder Änderung des Koord.syst.: % neue Zeile... 0 1 translate -60 rotate 0 1 translate 180 rotate % wieder neu zeichnen im neuen Syst. Der Teil zwischen "Beginn Verschiebung" und "Ende Verschiebung" kann ersetzt werden durch einen einzigen translate-befehl, wenn man die Verschiebungslänge ausrechnet: t = 2 cos 30, also 30 cos 2 mul 0 translate Ergebnis des obigen Programms: Lösung 2: andere Elementarzelle

Streifen als Prozedur definieren 20 20 scale 0.05 setlinewidth /streifen 20 20 moveto 10 3 0 1 rlineto 60 rotate 0 1 rmoveto 180 rotate 10 gsave streifen grestore 30 cos 1.5 translate Kommentar-Konventionen Einhaltung wichtig beim Ausdrucken. (vgl. Vollenweider 1989) Erste Zeile in der Datei: %!PS-Adobe-2.0 EPSF-2.0 Der folgende BoundingBox-Kommentar muss im Dateikopf (also im Block der ersten Kommentare) vorhanden sein: %%BoundingBox: ULx ULy ORx ORy Untere linke und obere rechte Ecke einer Begrenzungsbox, Angabe im Koordinatensystem des PostScript-Anwenders. Also z.b.: %%BoundingBox: 0 0 596 843 Weitere, empfohlene Kommentare: %%Title: Dokument-Titel %%Creator: Ihr Name

%%CreationDate: Datums- und Zeitangabe %%EndComments Abschluss der Kopf-Kommentare Font-Namen Erzeugung einer Liste der verfügbaren Fonts des Druckers (standardmäßig vorgegeben meist 35 Fonts): %!PS-Adobe-2.0 EPSF-2.0 %%BoundingBox: 0 0 596 843 /buffer 100 string def /x 20 def /y 750 def FontDirectory pop } forall % für jeden Directory- %Eintrag werden 2 Objekte auf den Stack gelegt, eines wird % gleich entfernt mit pop count % für jeden Stack-Eintrag mache... dup % Font-Name wird für findfont und für cvs % gebraucht findfont 20 scalefont setfont x y moveto /y y 20 sub def % Zuweisung an y buffer cvs show Verwendung anderer Maßeinheiten als pt durch Definition einer Umrechnungsfunktion: z.b. /cm 28.346456 mul Die Verwendung der neuen Maßeinheit wird dann sehr einfach: 5 cm 4.5 cm moveto Füllregeln Der aktuelle Pfad kann Selbstüberschneidungen haben und aus mehreren Teilpfaden bestehen. Beispiel: /cm 28.346456 mul 5 cm 10 cm moveto 5 cm 0 rlineto 0 10 cm rlineto -5 cm 0 rlineto closepath 9 cm 7.5 cm moveto 0 7.5 cm rlineto 5 cm 0 rlineto 0-7.5 cm rlineto

closepath 8 cm 12.5 cm moveto 5 cm 0 rlineto 0 5 cm rlineto -5 cm 0 rlineto closepath Füllen nach der Non-Zero Winding Rule (Befehl fill, d.h. setze 0.5 setgray fill statt ein): waagerechte Test-Strahlen durch alle Flächenteile Zähler z für jeden Strahl links mit 0 initialisieren trifft Strahl auf nach oben gerichteten Kurvenzug: z++ trifft Strahl auf nach unten gerichteten Kurvenzug: z-- fülle alle Flächen, wo z ungleich 0 ist

Ergebnis:

Füllen nach der Even-Odd Rule (Befehl eofill statt fill): z wird für jeden Übergang inkrementiert (unabh. von der Richtung), fülle alle Flächen, wo z ungerade ist. Ergebnis: Clipping Ausblenden von Teilen der Seite durch eine Maske. Erst Definition der Maske, dann der Grafik, die geclippt werden soll. Clipping-Befehl hat dauerhafte Wirkung und muss mit gsave... grestore gekapselt werden, wenn danach noch ohne Clipping gezeichnet werden soll! clip eoclip Übernahme des aktuellen Pfades als Clipping-Pfad, danach Zeichnung nur noch dort, wo Färbung bei fill einträte (non-zero winding rule) analog, aber mit even-odd rule

Beachte: Bei beiden Befehlen bleibt der aktuelle Pfad erhalten (und kann z.b. mit gezeichnet werden). Beispiel: /Kreis1 150 300 100 0 360 arc closepath /Kreis2 250 420 moveto 150 420 100 0 360 arc closepath /Vertikalen newpath 0 10 500 0 moveto 0 800 rlineto } for /Horizontalen newpath 0 10 800 0 exch moveto 500 0 rlineto } for Kreis1 Kreis2 eoclip % Vertikalen Horizontalen Ergebnis: ohne mit

Gestrichelte Linien Befehl setdash 2 Argumente: Array der Strichelungsintervalle, Offset. Die Array-Einträge werden automatisch periodisch wiederholt. Beispiel: /mm 2.834646 mul /Linie 300 0 rlineto 20 800 moveto [ 20 5 ] 0 setdash Linie 20 780 moveto [ 30 ] 25 setdash Linie 20 760 moveto [ 4 mm 1.6 mm 1 mm 1.6 mm ] 0 setdash Linie 20 740 moveto [] 0 setdash Linie Ergebnis:

Anwendungsbeispiel: Funktionsverläufe Sinus- und Kosinusfunktion in einem Diagramm überlagert

/Schrittw 5 def /xtr 50 add /ytr 200 mul 400 add /Xachse 0 xtr 0 ytr moveto 360 xtr 0 ytr lineto /Yachse 0 xtr -1 ytr moveto 0 xtr 1 ytr lineto /Sinfkt 0 xtr 0 sin ytr moveto 0 360 Schrittw idiv Schrittw add dup dup sin exch xtr exch ytr lineto pop /Cosfkt 0 xtr 0 cos ytr moveto 0 360 Schrittw idiv Schrittw add dup dup cos exch xtr exch ytr lineto pop [ 10 ] 0 setdash Xachse Yachse Sinfkt Cosfkt Übergabe von Parametern an Prozeduren durch /pa n exch def... /pa 2 exch def

/pa 1 exch def am Anfang der Prozedurdeklaration dann kann auf pa 1, pa 2,..., pa n im Inneren der Prozedur zurückgegriffen werden. Aufruf: p1 p2... pn Prozedurname (pi: aktueller Wert des Parameters pa i ). Beachte: Beim Aufruf wird der Prozedurname ganz oben auf den Stack gelegt. Beim Abarbeiten der Prozedur wird dieser sukzessive mit allen pi getauscht, und diese werden dabei an die pa i übergeben. Beispiel: Länge eines Vektors. /Times-Roman findfont 20 scalefont setfont 100 700 moveto /Laenge /y exch def /x exch def x dup mul y dup mul add sqrt 3 4 Laenge 10 string cvs show Anwendungsbeispiele: z.b. Prozedur für Pfeile (statt rlineto), rplineto (selbstdefiniert): /rplineto /y exch def /x exch def /laenge /yy exch def /xx exch def xx dup mul yy dup mul add sqrt /sk x y laenge div 10 mul % Skalierung auf feste Länge 10 x y rlineto 150 rotate x sk y sk rlineto

x sk neg y sk neg rmoveto 60 rotate x sk y sk rlineto x sk neg y sk neg rmoveto -210 rotate % Ausgangsorientierung wiederherstellen weiteres Anwendungsbeispiel: Ein einfaches Fraktal Koch'sche Kurve Realisierung mit rekursivem Prozeduraufruf: /iterzahl 5 def /koch /tiefe exch def tiefe iterzahl lt % solange Iterationszahl noch nicht ausgeschöpft... 1 3 div dup scale tiefe 1 add dup dup dup % Argument wird 4mal gebraucht koch 60 rotate koch -120 rotate koch 60 rotate koch 3 3 scale % alte Skalierung wiederherstellen! }

400 0 rlineto } ifelse 50 600 moveto 0 koch Last modification: October 22.10.2003