Gerasterte Linien. y n y i y(x i ) x n. x i. Nord. Ost. Prof. Dr. Aris Christidis

Ähnliche Dokumente
Gerasterte Linien. y n y i y(x i ) x n. x i. Nord. Ost. Prof. Dr. Aris Christidis SS 2017

Exkurs: Fotorealismus, Echtzeit, Arithmetik

Die Rasterbildtechnik

Graphische Datenverarbeitung und Bildverarbeitung

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

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

Der Algorithmus von Bresenham

Computergraphik Grundlagen

Plotten von Kreisen ( nach Jack Bresenham ) (C) Ac bis

11 Grafikprogrammierung

Sebastian Kurfürst

PROCESSING STRUKTUR UND INPUT. Created by Michael Kirsch & Beat Rossmy

3D-Computergrafik. Rastergrafik

6.2 Scan-Konvertierung (Scan Conversion)

Füllen von Primitiven

Rastergrafikalgorithmen

Angewandte Mathematik und Programmierung

11 Grafikprogrammierung

Hallo Welt für Fortgeschrittene

Plotten von Linien ( nach Jack Bresenham, 1962 )

Graphische Datenverarbeitung

Arbeitsblatt 6: Programmierung geometrischer Figuren

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Datenstrukturen und Algorithmen. Christian Sohler FG Algorithmen & Komplexität

Praktische Informatik I - Algorithmen und Datenstrukturen Wintersemester 2006/ Algorithmen und ihre formalen Eigenschaften, Datenstrukturen

Übung zur Vorlesung Berechenbarkeit und Komplexität

4. Zahlendarstellungen

PROCESSING SCHUBLADEN UND ZEICHEN. Created by Michael Kirsch & Beat Rossmy

Algorithmische Geometrie

Raster- und Vektorgrafik

DISKRETISIERUNG: LINIEN ZEICHNEN

Übungskomplex Reelle Zahlen. Rechnen mit Gleitkommazahlen

Geschichte der Computergrafik Zeichenalgorithmen Bildformate Grafikstandards

Probeklausur: Programmieren I

1. Teilklausur. Name:... Vorname:... Matrikel-Nummer:...

Operatoren und Ausdrücke

Algorithmen II Vorlesung am

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

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

Spiegelgasse 1 CH 4051 Basel. Vorführung der laufenden Programme im Tutorium Woche 3 (Abgabe ).

Beispiel / Übung: Prof. Dr. A. Christidis WS 2012/13

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 3

Hallo Welt für Fortgeschrittene

Graphic Coding. Klausur. 9. Februar Kurs A

Einführung in die Informatik I

Folgen und Funktionen in der Mathematik

Bachelorprüfung: Programmieren I

Programmierstarthilfe SS 2009 Fakultät für Ingenieurwissenschaften und Informatik 4. Blatt Für die Woche vom bis zum 22.5.

Der Zapfhahnalgorithmus nach Rabinowitz & Wagon

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Arithmetik, Algebra, Mengen- und Funktionenlehre

Prüfung Programming: Bildbearbeitung

Rastergraphik & Rasteralgorithmen

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

PROCESSING EINE EINFÜHRUNG IN DIE INFORMATIK. Created by Michael Kirsch & Beat Rossmy

2D-Grundlagen. Kapitel Koordinatensysteme

2D-Grundlagen. Kapitel Koordinatensysteme

Diskreter Logarithmus und Primkörper

Proseminar Computergraphik: Rastergrafik-Algorithmen

Gleitkommazahlen. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 74

Pattern Movement. Technische Universität Darmstadt Seminar Informatik SS 06 Prof. Dr. Fürnkranz. Ante Zubac

Problem: Gegeben Spezifikation (P,Q) und Implementierung S Gesucht formaler (automatisierbarer?) Beweis, dass S (P,Q) erfüllt.

Isomorphismus. Definition Gruppen-Isomorphismus. Seien (G, +) und (G, ) Gruppen. Die Abbildung f : G G heißt Gruppen-Isomorphismus, falls gilt

Speichern von Zuständen

Korrektur Aufgabe 8.1

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Kapitel 3. Zeichenalgorithmen. 3.1 Zeichnen von Linien Midpoint Line Algorithmus

Programmieren 1 C Überblick

Programmieren und Problemlösen

Die inverse Diskrete Fourier Transformation

Algorithmen und Datenstrukturen 2

Algorithmen zur Datenanalyse in C++

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und Datenstrukturen

} Symmetrieachse von A und B.

Computergrafik Universität Osnabrück, Henning Wenke,

Objektorientierte Programmierung

Übung Notendarstellung

Vom Algorithmus zum Programm

Computergrafik SS 2010 Oliver Vornberger

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Quad-trees. Benjamin Niedermann Übung Algorithmische Geometrie

Computergrafik 2: Übung 2. Subsampling und Moiré-Effekte, Color Maps und Histogrammlinearisierung

11 Grafikprogrammierung

Algorithmen und Datenstrukturen (für ET/IT)

Inhaltsverzeichnis. 4 Rasterung

Diskrete Strukturen Kapitel 5: Algebraische Strukturen (Gruppen)

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Algorithmen und Datenstrukturen

Wahrscheinlichkeit und Statistik

2.8 Kurvenscharen, Orthogonaltrajektorien und Einhüllende. Bei den trennbaren Dgln fanden wir die Lösung in impliziter Gestalt:

Hinweise zur Prüfung Programmieren WS0304 Seite 1. Schreiben Sie folgende For-Schleife in eine äquivalente While-Schleife um.

30 Metriken und Normen

Transkript:

Nord y n y i y(x i ) y 0 m x 0 x i x n Ost

Folgepixel: y(x ) = y(x +1) = m. (x +1 x ) + y (n+1) Punkte einer gerasterter Geraden zw. (x 0,y 0 ) u. (x n,y n ) hier verwendete Notation: x i : Abszisse des i-ten Rasterpunktes (x i N 0 ) x i+1 = x i + 1 x i+j = x i +j y(x i ): zu x i, gehörige, mathem. exakte Ordinate (y(x i ) R) y i : zu x i gewählte ( optimale ) Raster-Ordinate (y i N 0 ) Annahme: y(x 0 ) = y 0 ; y(x n ) = y n x =x n x 0 ; y = y(x n ) y(x 0 ) = y n y 0 Geradensteigung: m = y / x = [ y(x i ) y 0 ] / [ x i x 0 ] i=1,..,n Berechnung der Ordinaten ( R) aus Pixelgrößen ( N 0 ): y(x i ) = m. (x i x 0 ) + y 0

y(x i+1 ) y(x i ) = m (x i +1 x 0 (x i x 0 )) + y 0 y 0 = m y(x i+1 ) = y(x i ) + m = y 0 + (i+1). m Gl.(A) void BruteForceLine (int x0,int y0,int xn,int yn) { int x=x0; float y=(float)y0, m=(float)(yn-y0)/(xn-x0); } for (x=x0; x<=xn; x++,y+=m) setpixel (x, (int)y); return; d Dreiecke / Szene * p Umrißpixel / Dreieck * f unnötige floatops/umrißpixel * t nsec/floatop ergeben, falls: d=100.000; p=100; f=1; t=10 eine unnötige Wartezeit von 0,1 sec / Szene! Wunsch: Von Pixel-Koordinaten (gerundet, Ganzzahl-Arithmetik auf Folgepixel schließen N 0 ) mit

Jack Elton Bresenham: Algorithm for Computer Control of a Digital Plotter (IBM Systems Journal, 1965) 0 < x 0 < x n Herleitung für 1. Oktanten (o.b.d.a.): m 1 0 < y 0 < y n y x Wachstum gerasterter Linie nach Osten oder Nordosten durch Hinzunahme jeweils eines weiteren Pixels. Richtungsentscheidung (O/NO) anhand der mathematisch exakten Ordinaten y(x i ) an der halben Pixel-Breite (Midpoint Algorithm nach M.L.V. Pitteway, 1967) Erstes ermitteltes Pixel (x 1,y 1 ) : Gl.(A) y(x 1 ) = y(x 0 +1) = y(x 0 ) + y / x = y 0 + m weiter nach Osten (y 1 = y 0 ), wenn y(x 0 ) + y / x < y 0 + ½, d.h., wenn y / x < ½ oder 2 y x < 0 ; sonst weiter nach Nordosten (y 1 = y 0 +1)

Hinzunahme von Folgepixel (i+1), i=1,...,n-1: Gl.(A) y(x i+1 ) = y(x 0 +i+1) = y 0 + (i+1). y / x Weiter nach Osten (y i+1 = y i ), wenn: y 0 + (i+1). y / x < y i + ½ sonst weiter nach Nordosten (y i+1 = y i +1) [ y i ist nicht berechenbar!] Ost, wenn: (i+1). y / x < y i y 0 + ½ N := Anzahl bisheriger Nordost-Entscheidungen E = y i y 0 := Anzahl bisheriger Ost-Entscheidungen N + E = i [ N, E: nicht berechenbar aber zählbar! ]

(Wdhlg.:) Ost, d.h. y i+1 = y i, wenn (i+1). y / x < y i y 0 + ½ (N+E+1). y / x < N + ½ 2. N. y + 2. E. y + 2. y < 2. N. x+ x N. 2. ( y x) + E. 2. y + 2. y x < 0 Zur Erinnerung: Bei der ersten Entscheidung i = N = E = 0 Ost-Bedingung : 2 y x < 0 Bresenham s Strategie: Einrichtung einer decision variable d, die mit 2. y x initialisiert und nach jeder Folge- Entscheidung um 2 y (Ost) bzw. 2. ( y x) (Nordost) erhöht wird.

void MidpointLine (int x0,int y0, int xn,int yn) { int dx, dy, d; int incre, incrne; /*Increments for E & NE*/ int x=x0, y=y0; /*Start & current pixel*/ dx=xn-x0; dy=yn-y0; d=2*dy-dx; incre=2*dy; incrne=2*(dy-dx); /*Increments */ for (x=x0; x < xn; x++) /*last pixel omitted!*/ { SetPixel (x, y); if (d < 0) { d += incre; }/*choose E*/ else { d += incrne; y++; }/*choose NE*/ } return; } Herleitung für 1. Oktanten (o.b.d.a.): m 1 Anpasssung unter Nutzung von Symmetrien! (Übung!)

Besonderheiten / Vorzüge des Bresenham-Algorithmus ( Bresenham s algorithm for scan-converting straight lines ): Nutzung der Tatsache, daß Pixel diskret sind: x i+1 = x i + 1 x i+j = x i +j y(x j ) = y 0 + j. m Verknüpfung algorithmischer Vorgänge (Entscheidungen) mit Variablen-Werten: N = y i y 0 ; N + E = i Entscheidung über Hinzunahme von Folgepixel anhand des zuletzt gesetzten Pixels (ohne Geraden-Steigung m) Ganzzahlige Addition und Subtraktion Je Linie nur 3 ganzzahlige Multiplikationen mit 2 (Hw!) Erweiterbar auf Kreise und Ellipsen (in obiger Form) Repetierbar u. (grundsätzlich) in der Richtung umkehrbar (wichtig für Löschung mit Hintergrund-Farbe!) Läßt in obiger Version den letzten Punkt aus (Polygone: letzter Punkt = erster Flimmern, Löcher im Papier)

Übung Übung: Implementierung des Bresenham-Algorithmus für alle Oktanten mit ASCII-Zeichen als Bildpunkten: (i) Erweiterung des Algorithmus (ii) Feststellung / Sicherstellung der Umkehrbarkeit Zu allen Übungen: *.obj-dateien größtenteils mitgeliefert (pro Fehler-Lokalisierung) Aufgaben mit großen Anteilen zur Wiederverwendung (contra Altlast-Ansammlung) BresenTable.exe