Zeichnen von Geraden. Naiver Geradenalgorithmus. drawpixel(x, round(y)); double dx = x1 - x0; double y = y0; double dy = y1 - y0; double m = dy / dx;

Ähnliche Dokumente
Die Rasterbildtechnik

Sebastian Kurfürst

6.2 Scan-Konvertierung (Scan Conversion)

Proseminar Computergraphik: Rastergrafik-Algorithmen

Rastergrafikalgorithmen

Graphische Datenverarbeitung und Bildverarbeitung

2.11 Clipping von Linien

Graphische Datenverarbeitung und Bildverarbeitung

Computergraphik I. Scan Conversion: Lines & Co. Einordnung in die Pipeline. G. Zachmann Clausthal University, Germany zach@tu-clausthal.

Milderung der Aliasing-Effekte (keine Lösung des Problems)

2D-Clipping. Kapitel Clipping von Linien. y max. y min x min. x max

1.1. Geradengleichung aus Steigung und y-achsenabschnitt

(Tip zu g): Die Ziffern bestehen aus aufeinanderfolgenden Quadratzahlen).

Thema 1: Geraden zeichnen Punkte berechnen. Ein Lese- und Übungsheft. 7 Seiten Einführung und Theorie. 22 Seiten Aufgaben mit Lösungen

Inhaltsverzeichnis. 1 Hardwaregrundlagen

Der Algorithmus von Bresenham

= a) Berechnen Sie die fehlenden Funktionswerte der Wertetabelle. n

Abitur 2010 Mathematik LK Geometrie V

Kreis - Übungen. 1) Die y-achse ist am Punkt A eine Tangente an den Kreis. Mit dem noch nicht bekannten "Zwischenwert"

Herbst b) Bestimmen Sie die Gleichung der Tangente t und Ihren Schnittpunkte A mit der x-achse. t geht durch B(1/2) und hat die Steigung m=-6 :

Hausaufgaben und Lösungen

VEKTOREN. Allgemeines. Vektoren in der Ebene (2D)

Übungen mit dem Applet Kurven in Polarkoordinaten

Übungen mit dem Applet Kurven in Parameterform

Kursstufe K

Algorithmische Techniken für Geometrische Probleme

Mathematik Name: Nr.5 K2 Punkte: /30 Note: Schnitt:

Füllen von Primitiven

Informatik II Vorlesung am D-BAUG der ETH Zürich. Vorlesung 7, Fallstudie Point-In-Polygon Algorithmus Diskretisierung: Linien zeichnen

Lineare Funktionen. Die lineare Funktion

Kantonsschule Solothurn RYS SS11/ Nach welcher Vorschrift wird der Funktionswert y aus x berechnet? Welcher Definitionsbereich ID ist sinnvoll?

Das Wichtigste auf einen Blick

Polaren am Kreis. Helmut Frühinsfeld (aka ottogal) September x 2. , usw.) a 2. = a 1 b 1 + a 2 b 2 (1) a = 1 + a 2 2 (2) a 2 a.

10.6. Implizite ebene Kurven und Tangenten

Geometrie Strecke, Gerade, Halbgerade

Kreis - Tangente. 2. Vorbemerkung: Satz des Thales Eine Möglichkeit zur Bestimmung der Tangente benutzt den Satz des Thales.

Abitur 2013 Mathematik Geometrie V

Hallo Welt für Fortgeschrittene

Lösungen zum Arbeitsblatt: y = mx + b Alles klar???

Transformation - 3. Für "übliche" Anwendungen in der Geometrie ist es sinnvoll, bei Transformationen eine gleiche

Vorkurs Mathematik Intensiv. Vektoren, Skalarprodukte und Geraden in der Ebene Musterlösung

Aufgabensammlung zum Üben Blatt 1

x 1 Da y nur in der 2.Potenz vorkommt, ist die Kurve achsensymmetrisch zur x-achse.

Aufgabe 2: Analysis (WTR)

A3.2 Quadratische Funktionen

Lösung - Serie 7. D-MAVT/D-MATL Analysis I HS 2016 Dr. Andreas Steiger. 1. MC-Aufgaben (Online-Abgabe)

2.5. Aufgaben zu Dreieckskonstruktionen

Wavelets made easy Yves Nievergelt

Ebene Bereiche und Bereichsintegrale

Abituraufgaben Analytische Geometrie Wahlteil 2016 BW

13. Klasse TOP 10 Grundwissen 13 Geradengleichungen 01

Herbst mit den Parametern a und b

5. Geraden und Ebenen im Raum 5.1. Lineare Abhängigkeit und Unabhängigkeit von Vektoren

Lineare Funktionen. Klasse 8 Aufgabenblatt für Lineare Funktionen Datum: Donnerstag,

Computergrafik 1. Blatt 5

Lineare Funktionen Arbeitsblatt 1

8 Dezimalzahlen und Fehlerfortpflanzung

Die Quadratur des Kreises

Technische Universität München Zentrum Mathematik

Prüfungsteil B, Aufgabengruppe 2, Analysis. Bayern Aufgabe 1. Bundesabitur Mathematik: Musterlösung. Abitur Mathematik Bayern 2014

Jgst. 11/I 2.Klausur

Featurebasierte 3D Modellierung

1.7. Die indirekte (umgekehrte) Proportionalität. a x heisst umgekehrte (indirekte) Proportionalität.

Zusammenfassung der Analytischen Geometrie

Abitur 2011 G8 Musterabitur Mathematik Geometrie VI

KULTUSMINISTERIUM DES LANDES SACHSEN-ANHALT

Vorkurs Mathematik Intensiv. Geraden, Ebenen und lineare Gleichungssysteme - Musterlösung

m2l 60.odt Klausur 12/I B 1. Gegeben seien zwei Geraden. Wie gehen Sie vor, um über deren Lagebeziehung eine Aussage zu treffen.

Unterrichtsreihe zur Parabel

QUADRATISCHE FUNKTIONEN

Durch Eliminieren der Wurzel erhalten wir die bekannte Kreisgleichung:

Abitur 2011 G9 Abitur Mathematik GK Geometrie VI

Lineare Funktionen. 6. Zeichne die zu den Funktionen gehörenden Graphen in ein Koordinatensystem und berechne ihren gemeinsamen Schnittpunkt.

Den Mittelpunkt zwischen zwei Punkten kannst du mithilfe der Ortsvektoren und Verbindungsvektoren berechnen.

Hausaufgaben zu Geradengleichungen

} Symmetrieachse von A und B.

4. Segmentierung von Objekten Video - Inhaltsanalyse

Parallele Algorithmen in der Bildverarbeitung

Mehrfachintegrale 1-E1. Ma 2 Lubov Vassilevskaya

Geometrie. Hallo Welt! für Fortgeschrittene Simon Kuhnle. 11. Juli

Kreise. 1. Kreise in der Ebene ( 2 ) Dr. Fritsch, FGG Kernfach Mathematik Klasse 12-A18

Beispiellösungen zu Blatt 77

Geometrie I. Tobias Langer Tobias Langer Geometrie I / 59

Hallo Welt! für Fortgeschrittene. Geometrie I. Philipp Erhardt. 19. Juli Philipp Erhardt Geometrie I 19. Juli / 27

Qualiaufgaben Konstruktionen

Vektoren - Einführung

Mathematik 12. Jahrgangsstufe - Hausaufgaben

2 Polynome und rationale Funktionen

Einführung. Ablesen von einander zugeordneten Werten

Abitur 2016 Mathematik Geometrie V

Kurvendiskussion. Gesetzmäßigkeiten. Lineare Funktionen. Funktionsgleichung

Lösungen zur Prüfung 2014: Pflichtteil

Computergraphik Grundlagen

Mittlere-Reife-Prüfung 2007 Mathematik I Aufgabe B2

Mathematik Klasse 11 Maximilian Ernestus 1

Elemente der SchulgeometrieGrundschule. Aufgabenblatt 8 Körper und Kippen

= und t ( 2) = f (2) = ergibt sich die Tangentengleichung

Transkript:

Zeichnen von Geraden Naiver Geradenalgorithmus // Verbinden der Gitterpunkte (x0,y0) und // (x1,y1) durch ein Geradenstueck void drawline(int x0, int y0, int x1, int y1) { int x; double dy = y1 - y0; double dx = x1 - x0; double m = dy / dx; double y = y0; } for (x=x0; x<=x1; x++) { drawpixel(x, round(y)); y = y + m; //oder: y = y0 + m*(x - x0); } Computergrafik: Zeichnen von Kurven p.1/92

Zeichnen von Geraden Computergrafik: Zeichnen von Kurven p.2/92

Zeichnen von Geraden Liegt die Steigung der Geraden dem Betrage nach nicht zwischen 0 und 1, so sollten bei der Berechnung die Rollen von - und -Achse vertauscht werden. Pro Bild müssen i.a. sehr viele Geradensegmente gezeichnet werden. Daher sollte der Algorithmus zum Geradenzeichnen möglichst effizient sein. Der Bresenham- oder Mittelpunktalgorithmus verzichtet auf Fließkommaoperationen und zeichnet die Gerade allein auf der Basis von Integeroperationen. Computergrafik: Zeichnen von Kurven p.3/92

Der Mittelpunktalgorithmus Wir betrachten im Folgenden zunächst nur Geraden mit einer Steigung zwischen 0 und 1. Wurde bei einer derartigen Geraden ein Pixel gezeichnet, kommen für das nächste zu zeichnende Pixel jeweils nur zwei Pixel in Frage: das Pixel rechts daneben oder das Pixel diagonal darüber Computergrafik: Zeichnen von Kurven p.4/92

Der Mittelpunktalgorithmus Computergrafik: Zeichnen von Kurven p.5/92

Der Mittelpunktalgorithmus Die Entscheidung, welches der beiden Pixel gezeichnet werden muss, wird anhand des Mittelpunktes zwischen den beiden Pixelkandidaten entschieden: Liegt der Mittelpunkt unterhalb der Geraden, muss das obere Pixel gezeichnet werden. Liegt der Mittelpunkt oberhalb der Geraden, muss das untere Pixel gezeichnet werden. Computergrafik: Zeichnen von Kurven p.6/92

Der Mittelpunktalgorithmus Geradengleichung: in impliziter Form: bzw. Computergrafik: Zeichnen von Kurven p.7/92

Der Mittelpunktalgorithmus liegt auf der Geraden liegt oberhalb der Geraden liegt unterhalb der Geraden Setzt man für die Koordinaten des entsprechenden Mittelpunktes ein, so gilt: ist zu zeichnen. Das Pixel ist zu zeichnen. Das Pixel muss eine (einheitliche) Im Falle Rundungsentscheidung gefällt werden (z.b. immer das obere Pixel). Computergrafik: Zeichnen von Kurven p.8/92

und Der Mittelpunktalgorithmus zu zeichnendes Geradenstück zwischen den Pixeln und Geradengleichung: mit Computergrafik: Zeichnen von Kurven p.9/92

Der Mittelpunktalgorithmus Computergrafik: Zeichnen von Kurven p.10/92 implizite Form: bzw. mit

Der Mittelpunktalgorithmus mit Einsetzen des Mittelpunktes ganzzahligem Wert und erfordert mit ganzzahligem Wert Fließkommaarithmerik. Multiplikation mit dem Faktor 2: Computergrafik: Zeichnen von Kurven p.11/92

Der Mittelpunktalgorithmus mit Einsetzen des Mittelpunktes ganzzahlig sind: wobei rein ganzzahlige Operationen! Computergrafik: Zeichnen von Kurven p.12/92

Der Mittelpunktalgorithmus Weitere Verbesserung in der Originalversion des Mittelpunktalgorithmus: bzw. inkrementelle Berechnung der Werte nur ganzzahlige Addition, keine Multiplikation erforderlich Computergrafik: Zeichnen von Kurven p.13/92

Der Mittelpunktalgorithmus inkrementelle Berechnung der Entscheidungsvariablen? Wie ändert sich Computergrafik: Zeichnen von Kurven p.14/92

Der Mittelpunktalgorithmus neu alt neu Computergrafik: Zeichnen von Kurven p.15/92 Fallunterscheidung: alt

Der Mittelpunktalgorithmus war das nach, d.h. zu zeichnende Pixel. Fall 1: zu betrachtender zum Zeichnen des Pixels Mittelpunkt: neu Computergrafik: Zeichnen von Kurven p.16/92

Der Mittelpunktalgorithmus neu alt alt neu Computergrafik: Zeichnen von Kurven p.17/92

Der Mittelpunktalgorithmus war das, d.h. zu zeichnende Pixel. Fall 2: nach zu betrachtender zum Zeichnen des Pixels Mittelpunkt: neu Computergrafik: Zeichnen von Kurven p.18/92

Der Mittelpunktalgorithmus alt neu alt neu Computergrafik: Zeichnen von Kurven p.19/92

Der Mittelpunktalgorithmus gewählt wurde gewählt wurde falls falls d.h. alt alt falls falls ist immer ganzzahlig, so dass sich die Entscheidungsvariable nur um ganzzahlige Werte ändert. Computergrafik: Zeichnen von Kurven p.20/92

Der Mittelpunktalgorithmus : Startpixel: Initialisierung von erster zu betrachtender Mittelpunkt: init Computergrafik: Zeichnen von Kurven p.21/92

Der Mittelpunktalgorithmus ist i.a. nicht ganzzahlig. init die Betrachte statt der Entscheidungsvariablen Entscheidungsvariable : ist immer ganzzahlig. Computergrafik: Zeichnen von Kurven p.22/92

Der Mittelpunktalgorithmus init mit neu alt falls alt falls alt Computergrafik: Zeichnen von Kurven p.23/92

Der Mittelpunktalgorithmus Beispiel: Geradensegment von (2,3) bis (10,6): Computergrafik: Zeichnen von Kurven p.24/92

Der Mittelpunktalgorithmus 1 2 3 4 5 6 7 8 9 1011 init 7 6 5 4 3 2 Computergrafik: Zeichnen von Kurven p.25/92

Der Mittelpunktalgorithmus 1 2 3 4 5 6 7 8 9 1011 init 7 6 5 4 3 2 Computergrafik: Zeichnen von Kurven p.26/92

Der Mittelpunktalgorithmus init 1 2 3 4 5 6 7 8 9 1011 init 7 6 5 4 3 2 Computergrafik: Zeichnen von Kurven p.27/92

Der Mittelpunktalgorithmus init init 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 1011 Computergrafik: Zeichnen von Kurven p.28/92

Der Mittelpunktalgorithmus init 1 2 3 4 5 6 7 8 9 1011 init 7 6 5 4 3 2 Computergrafik: Zeichnen von Kurven p.29/92

Der Mittelpunktalgorithmus init init 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 1011 Computergrafik: Zeichnen von Kurven p.30/92

Der Mittelpunktalgorithmus init init 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 1011 Computergrafik: Zeichnen von Kurven p.31/92

Der Mittelpunktalgorithmus init init 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 1011 Computergrafik: Zeichnen von Kurven p.32/92

Der Mittelpunktalgorithmus init 1 2 3 4 5 6 7 8 9 1011 init Computergrafik: Zeichnen von Kurven p.33/92 7 6 5 4 3 2

Der Mittelpunktalgorithmus Geraden, deren Steigung betragsmäßig größer als 1 ist: Vertauschung der Rollen von - und der Durchführung des Algorithmus. -Achse bei Geraden mit negativer Steigung (zwischen und Führe die gleichen Überlegungen wie für die Gerade mit der gleichen positiven Steigung durch. Anstatt des nordöstlichen Pixels muss nur jeweils das südöstliche betrachtet werden. ): Geradensegmente mit nichtganzzahligem Anfangs- und Endpunkt: Runde die Koordinaten des Anfangs- und Endpunktes und zeichne die Verbindungsgerade. Computergrafik: Zeichnen von Kurven p.34/92

Strukturelle Algorithmen Beim Zeichnen einer Geraden treten sich wiederholende Steigungsmuster auf, z.b.,,,, Computergrafik: Zeichnen von Kurven p.35/92

Strukturelle Algorithmen Bezeichnet einen Diagonal- ( -Pixel) und einen Horizontalschritt ( -Pixel), so lässt sich eine Gerade durch ein sich wiederholendes Muster aus - und -Schritten beschreiben. Strukturelle Algorithmen berechnen diese Muster zum Zeichnen der Geraden. Der Mittelpunktalgorithmus benötigt für ein Geradenstück aus Pixeln ganzzahlige Rechenoperationen. Strukturelle Algorithmen benötigen nur logarithmischen Rechenaufwand. Computergrafik: Zeichnen von Kurven p.36/92

und Strukturelle Algorithmen Grundprinzip: gegeben: Start- und Endpunkt: bzw. (eines Geradenstücks mit Steigung zwischen 0 und 1) Berechne Es müssen (ohne das Startpixel) insgesamt Pixel gezeichnet werden. Dafür sind Diagonalund Horizontalschritte durchzuführen. Wähle als erste Approximation die Sequenz. Permutiere die Ausgangssequenz so, dass sich die korrekte Sequenz ergibt. Computergrafik: Zeichnen von Kurven p.37/92

Der Algorithmus von Brons Sind und (bzw. ) nicht teilerfremd (d.h. ggt ), lässt sich das Zeichnen der Geraden durch sich wiederholende Sequenzen der Länge realisieren. Ohne Beschränkung der Allgemeinheit nehmen wir daher an, dass und teilerfremd sind. zwei beliebige Worte über dem. und Seien Alphabet Aus einer Ausgangsfolge mit teilerfremden Häufigkeiten und (sowie ohne Beschränkung der Allgemeinheit ) wird mittels ganzzahliger Division Computergrafik: Zeichnen von Kurven p.38/92

Der Algorithmus von Brons die permutierte Folge falls falls erzeugt. Fahre rekursiv mit den beiden Teilfolgen der Längen bzw. fort, bis oder gilt. Computergrafik: Zeichnen von Kurven p.39/92

Beispiel,,, ggt daher:, Computergrafik: Zeichnen von Kurven p.40/92

Unterschiedliche Pixeldichte Computergrafik: Zeichnen von Kurven p.41/92

Unterschiedliche Pixeldichte mit zum Punkt Gerade vom Punkt Länge der Geraden Pixeldichte Computergrafik: Zeichnen von Kurven p.42/92

Linienstile mit Bitmasken 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 durchgehend 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 gestrichelt 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 gepunktet 1 1 1 1 0 1 0 1 1 1 1 0 1 0 1 1 1 1 0 1 0 selbstdefiniert Computergrafik: Zeichnen von Kurven p.43/92

Linienstile mit Bitmasken Unterschiedliche Strichelungslängen bei Verwendung derselben Bitmaske Computergrafik: Zeichnen von Kurven p.44/92

Linienstile in Java 2D Liniendicke: BasicStroke bsthickline = new BasicStroke(3.0f); g2d.setstroke(bsthickline); Strichelungsmuster BasicStroke bsdash = new BasicStroke(thickness, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 2.0f, dashpattern,dashphase); Computergrafik: Zeichnen von Kurven p.45/92

Linienstile in Java 2D thickness: Dicke der Linie BasicStroke.CAP BUTT, BasicStroke.JOIN BEVEL, 2.0f legen die Übergänge bei Linienzügen fest. dashpattern: Array, das die Längen der Linien und Lücken festlegt, z.b. float[] dashpattern = new float[]{20,10}; dashphase: Stelle, an der das Strichelungsmuster beginnt Computergrafik: Zeichnen von Kurven p.46/92

StrokingExample.java dashpattern dashphase 4,5,8,5,12,5,16,5,20,5 0 20,10 10 20,10 0 20,10 0 Computergrafik: Zeichnen von Kurven p.47/92

Unter Clipping versteht man allgemein das Abschneiden oder gänzliche Weglassen von Objekten, die nur teilweise bzw. gar nicht in den darzustellenden Bildbereich hineinragen. Clipping Computergrafik: Zeichnen von Kurven p.48/92

2D-Geraden-Clipping Einfache, aber rechenaufwendige Methode des Clippings von Geradensegmenten: Berechnung der Schnittpunkte der betrachteten Geraden und den durch das Rechteck induzierten vier Geraden. Darstellung eines Geradenstücks mit Startpunkt und Endpunkt als Konvexkombination von Start- und Endpunkt:. mit Computergrafik: Zeichnen von Kurven p.49/92

2D-Geraden-Clipping Berechnung der Schnittpunkte mit dem Rechteck, das durch die Punkte min min und max max definiert wird: Bestimmung des Schnittpunktes mit der unteren Kante: max min min min Liefert Werte für und. (Gibt es keine eindeutige Lösung, sind die beiden Geraden parallel.) Computergrafik: Zeichnen von Kurven p.50/92

2D-Geraden-Clipping und : Der Schnittpunkt liegt außerhalb des Geradenstücks und vor min. : Das Geradenstück schneidet und die durch die untere Kante definierte Gerade vor min. und : Der Schnittpunkt liegt außerhalb des Geradenstücks und vor min. : Die Gerade schneidet die. und Kante vor und : Das Geradenstück schneidet die untere Kante. : Die Gerade schneidet die. und Kante hinter Computergrafik: Zeichnen von Kurven p.51/92

2D-Geraden-Clipping und : Der Schnittpunkt liegt außerhalb des Geradenstücks und hinter max. : Das Geradenstück schneidet und die durch die untere Kante definierte Gerade hinter max. und : Der Schnittpunkt liegt außerhalb des Geradenstücks und hinter max. Entsprechende Überlegungen für die übrigen Rechteckkanten Computergrafik: Zeichnen von Kurven p.52/92

Cohen-Sutherland-Clipping Ziel: möglichst Vermeidung der Berechnung von Geradenschnittpunkten Einteilung der 2D-Welt in neun Teilbereiche, die durch einen 4-Bit-Code beschrieben werden: wird der Binärcode Einem Punkt zugeordnet mit: min max min max Computergrafik: Zeichnen von Kurven p.53/92

Cohen-Sutherland-Clipping 1001 0001 0101 max max 1000 0000 0100 min min 1010 0010 0110 Computergrafik: Zeichnen von Kurven p.54/92

Cohen-Sutherland-Clipping und Endpunkt Geradensegment mit Startpunkt (fertig) zeichne die Strecke kein Zeichnen erforderlich (fertig). Es muss oder gelten, ohne Einschränkung der Allgemeinheit gelte Berechne den oder die Schnittpunkte (maximal zwei) des Geradensegments mit den Rechteckgeraden, zu denen die Eins(en) in gehören. Ersetze durch den (oder einen der beiden) Schnittpunkt(e) und fahre von vorne fort. Computergrafik: Zeichnen von Kurven p.55/92

Cohen-Sutherland-Clipping 1001 0001 0101 1000 0000 0100 1010 0010 0110 Computergrafik: Zeichnen von Kurven p.56/92

Cyrus-Beck-Clipping mit einem Punkt auf der Strecke Verbindungsvektor und : Computergrafik: Zeichnen von Kurven p.57/92

Cyrus-Beck-Clipping Für den Schnittpunkt der Geraden mit der Kante des Clippingbereichs muss gelten: : kein Schnittpunkt der Kante mit dem Geradensegment Computergrafik: Zeichnen von Kurven p.58/92

Cyrus-Beck-Clipping Die noch verbleibenden potenziellen Schnittpunkte mit den Rechteckkanten werden als potenziell austretend (PA) und potentiell eintretend (PE) charakterisiert. P 1 PA PA PE PE P 0 Computergrafik: Zeichnen von Kurven p.59/92

Cyrus-Beck-Clipping Rechnerisch lässt sich die Entscheidung PA oder PE anhand des Winkels zwischen der Geraden und dem zur entsprechenden Rechteckkante gehörenden Normalenvektor treffen:, liegt der Fall PE vor. Ist der Winkel größer als, liegt der Fall PA vor. Ist der Winkel kleiner als Dazu: Bestimmung des Vorzeichen des Skalarprodukts Computergrafik: Zeichnen von Kurven p.60/92

Cyrus-Beck-Clipping Berechnung des im Clippingrechteck liegenden Geradenstücks: Bestimme den größten Wert, der zu einem PE-Punkt gehört und den kleinste Wert, der zu einem PA-Punkt gehört. Gilt ist genau der Teil der Geraden zwischen den Punkten und in das Rechteck zu zeichnen. Andernfalls liegt das Geradenstück außerhalb des Rechtecks. Computergrafik: Zeichnen von Kurven p.61/92

Geraden-Clipping Probleme bei der Bestimmung des Startpixels: left lower lower - 0.5 lower - 1 Computergrafik: Zeichnen von Kurven p.62/92

Bresenham für Kreise Es soll ein Kreis mit Mittelpunkt und Radius gezeichnet werden. Ist ein Rasterpunkt, so reicht es, ein Verfahren zur Zeichnung eines Kreises mit Mittelpunkt zu kennen und als Offset zu verwenden. Kreissymmetrie (Achtelkreis ist ausreichend): (x,y) (y,x) (y,-x) (x,-y) (-x,-y) (-y,-x) (-y,x) (-x,y) Computergrafik: Zeichnen von Kurven p.63/92

Bresenham für Kreise in impliziter Form: Kreisgleichung liegt auf dem Kreis. liegt außerhalb des Kreises. liegt innerhalb des Kreises. Wurde der Punkt in einem Schritt gezeichnet, kommt als nächster zu zeichnender Punkt nur einer der beiden Punkte und in Frage. Computergrafik: Zeichnen von Kurven p.64/92

(x p,y p ) M O SO Bresenham für Kreise M O M SO Computergrafik: Zeichnen von Kurven p.65/92

Bresenham für Kreise Analog zu Geraden: implizite Darstellung des Kreises als Entscheidungsvariable Einsetzen des Mittelpunkts liefert Entscheidung für den nächsten zu zeichnenden Punkt gezeichnet werden., so muss Ist gezeichnet werden., so muss Ist in jedem Schritt? Um welchen Wert ändert sich Computergrafik: Zeichnen von Kurven p.66/92

Bresenham für Kreise war das nach, d.h. zu zeichnende Pixel Fall 1: zu betrachtender zum Zeichnen des Pixels Mittelpunkt: neu Computergrafik: Zeichnen von Kurven p.67/92

Bresenham für Kreise alt neu alt Computergrafik: Zeichnen von Kurven p.68/92 neu

Bresenham für Kreise war das, d.h. zu zeichnende Pixel Fall 2: nach zu betrachtender zum Zeichnen des Pixels Mittelpunkt: neu Computergrafik: Zeichnen von Kurven p.69/92

Bresenham für Kreise Computergrafik: Zeichnen von Kurven p.70/92 neu alt alt neu

Bresenham für Kreise gewählt wurde gewählt wurde falls falls d.h. alt falls falls alt ist immer ganzzahlig, so dass sich die Entscheidungsvariable nur um ganzzahlige Werte ändert. Computergrafik: Zeichnen von Kurven p.71/92

Bresenham für Kreise : Initialisierung von. mit Der Startpunkt des Kreises ist. erster zu betrachtender Mittelpunkt: : Initialisierung von Computergrafik: Zeichnen von Kurven p.72/92

Bresenham für Kreise alt Zusammenfassung: init neu alt alt falls falls Computergrafik: Zeichnen von Kurven p.73/92

Bresenham für Kreise bis auf bei der Initialisierung, nur ganzzahlige Operationen. durch den Wert ersetze auf bzw. Es müssten jetzt statt auf bzw. getestet werden. Da nur ganzzahlige Werte annimmt, genügt weiterhin die Abfrage oder. Computergrafik: Zeichnen von Kurven p.74/92

Bresenham für Kreise init neu alt falls alt falls alt Computergrafik: Zeichnen von Kurven p.75/92

Bresenham für Kreise Kreise mit nichtganzzahligem, aber rationalem Radius: Anwendung des gleichen Prinzips auf die implizite Form Computergrafik: Zeichnen von Kurven p.76/92

Prinzip des Bresenham-Algorithmus zu zeichnende Kurve gegeben: Im Intervall Voraussetzung: Entweder gilt oder im gesamten zu zeichnenden Intervall. Schreibe geeignet in impliziter Form und verwende als Entscheidungsvariable. Berechne die Änderung von in Abhängigkeit des zuletzt gezeichneten Pixels ( bzw. ). Computergrafik: Zeichnen von Kurven p.77/92

Prinzip des Bresenham-Algorithmus Voraussetzung: ist ganzzahlig oder zumindest rational. Ist (echt) rational, betrachte die Entscheidungsvariable anstelle von, wobei so gewählt ist, dass immer ganzzahlig ist. Bestimme den Startwert init ersten Mittelpunktes (nach durch Einsetzen des ). Ist init nicht ganzzahlig, können die Nachkommastellen ignoriert werden, wenn sich nur ganzzahlig ändert. Computergrafik: Zeichnen von Kurven p.78/92

Zeichnen beliebiger Kurven Der Mittelpunkt- oder Bresenham-Algorithmus lässt sich z.b. aufgrund der Steigungsvoraussetzungen nicht auf beliebige Kurven anwenden. Außerdem müssten die Berechnungsvorschriften für jeden Kurventyp individuell bestimmt werden. Beliebige Kurven werden daher nach folgendem Schema gezeichnet: zu zeichnende Kurve ) gegeben: Im Intervall (mit Computergrafik: Zeichnen von Kurven p.79/92

Zeichnen beliebiger Kurven int yround1, yround2; yround1 = round(f(x0)); for (int x=x0; x<x1; x++) { yround2 = round(f(x+1)); drawline(x,yround1,x+1,yround2); yround1 = yround2; } Computergrafik: Zeichnen von Kurven p.80/92

Zeichnen von Funktionen Computergrafik: Zeichnen von Kurven p.81/92

Antialiasing Aliasing-Effekte treten bei der diskreten Abtastung eines kontinuierlichen Signals auf. Beim Zeichnen von Linien (Abtastung einer kontinuierlichen Kurve durch ein diskretes Pixelgitter) kommt es daher zu Aliasing-Effekten (Ausfransungen, Stufen). Antialiasing versucht, diese Effekte durch die Verwendung von verschiedenen Grauwerten oder Farbintensitäten entgegenzuwirken. Pixel werden nicht entweder schwarz oder weiß gezeichnet, sondern mit unterschiedlicher Intensität, je nachdem, wie weit sie von der zu zeichnenden Linie entfernt sind oder abgedeckt werden. Computergrafik: Zeichnen von Kurven p.82/92

Unweighted Area Sampling Ein Geradenstück wird als (schmales, langes) Rechteck interpretiert. Jedem Pixel wird ein Quadrat zugeordnet. Die Intensität des Pixels wird proportional zur Schnittfläche des Pixelquadrats mit dem Geradenrechteck gewählt. Computergrafik: Zeichnen von Kurven p.83/92

Unweighted Area Sampling Einfache Heuristik zur Berechnung des Anteils des Pixelquadrats, der vom Geradenrechteck überdeckt wird: Das Pixelquadrat wird mit einem feineren Pixelraster überzogen und der Anteil der verfeinerten Pixel innerhalb des Geradenrechtecks bestimmt die Intensität des Pixels. Intensität: 11/25 Computergrafik: Zeichnen von Kurven p.84/92

Weighted Area Sampling Weighted Area Sampling: Verwendung einer Gewichtsfunktion Intensität für Pixel P Computergrafik: Zeichnen von Kurven p.85/92

Gupta-Sproull-Antialiasing Beim Weighted Area Sampling müssen diskrete Intensitätswerte (maximal 256, i.a. verwendet man deutlich weniger) berechnet. Durchläuft man die Pixel in geeigneter Weise, so ähnelt dieses Verfahren dem Zeichnen einer Kurve auf einem Pixelraster: Das Durchlaufen der Pixel entspricht dem Durchlaufen der -Pixel beim Kurvenzeichnen. Das Bestimmen der (diskreten/gerundeten) Intensitätswerte entspricht dem Berechnen der gerundeten Funktionswerte beim Kurvenzeichnen. Computergrafik: Zeichnen von Kurven p.86/92

Gupta-Sproull-Antialiasing Der Gupta-Sproull-Antialiasing-Algorithmus verwendet eine geeignete Gewichtsfunktion und eine passende Menge von Intensitätsstufen, so dass sich die Berechnung der Intensitätswerte mit dem Bresenham-Algorithmus durchführen lässt. Dadurch müssen keine Integrale berechnet, nicht einmal Fließkommaarithmetik verwendet werden. Antialiasing in Java2D: g2d.setrenderinghint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); Computergrafik: Zeichnen von Kurven p.87/92

Zeichnen dicker Linien Bei einer hohen Auflösung sind Linien, die nur einen Pixel breit sind, i.a. sehr dünn. Pixel-Replikation Zeichenstift Alternative: Linien als auszufüllende Polygone/Rechtecke betrachten Computergrafik: Zeichnen von Kurven p.88/92

Polygonzüge mit dicken Linien Wie sollen die Enden von dicken Linien aussehen? Computergrafik: Zeichnen von Kurven p.89/92

Java 2D: Zeichnen dicker Linien new BasicStroke(thickness,ending,join); Werte für ending: BasicStroke.CAP BUTT: Die Enden der Linien werden gerade, senkrecht zur Richtung der Gerade abgeschnitten. BasicStroke.CAP ROUND: An die Enden wird ein Halbkreis angefügt. BasicStroke.CAP SQUARE: An die Enden der Linien wird ein Rechteck angefügt, so dass die Linien um eine halbe Linienbreite verlängert werden. Computergrafik: Zeichnen von Kurven p.90/92

Java 2D: Zeichnen dicker Linien Werte für join: BasicStroke.JOIN MITER: Die äußeren Kanten der breiten Linien werden bis zu ihrem Schnittpunkt verlängert, so dass eine spitze Verbindung entsteht. Bei sehr spitzem Winkel kann die Spitze weit über die eigentlichen Linien hinaus gehen. Vermeidung: weiterer float-parameter, der die maximale Länge der Spitze begrenzt. Bei zu langer Spitze Verwendung des folgenden Verbindungsmodus: Computergrafik: Zeichnen von Kurven p.91/92

Java 2D: Zeichnen dicker Linien BasicStroke.JOIN BEVEL: Die Verbindungsstelle der beiden Liniensegmente wird gerade, sekrecht zur Winkelhalbierenden der beiden Linien abgeschnitten. BasicStroke.JOIN ROUND: An das abgeschnittene Ende, das sich bei BasicStroke.JOIN BEVEL ergibt, wird ein Kreisabschnitt anghängt. Der Öffnungswinkel des Kreisabschnitts wird so gewählt, dass die Enden der Liniensegmente die Tangenten an den Kreisabschnitt bilden. Computergrafik: Zeichnen von Kurven p.92/92