• Keine Ergebnisse gefunden

Gerasterte Linien

N/A
N/A
Protected

Academic year: 2022

Aktie "Gerasterte Linien"

Copied!
9
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Prof. Dr. Aris Christidis

Gerasterte Linien

xi y(xi)

yi

Ost

Nord

xn yn

m

x0 y0

(2)

Prof. Dr. Aris Christidis

Gerasterte Linien

(n+1) Punkte einer gerasterter Geraden zw. (x0,y0) u. (xn,yn) – hier verwendete Notation:

xi: Abszisse des i-ten Rasterpunktes (xiN0) xi+1 = xi + 1 Ö xi+j= xi+j

y(xi): zu xi, gehörige, mathem. exakte Ordinate (y(xi) ∈ R) yi: zu xi gewählte („optimale“) Raster-Ordinate (yiN0) Annahme: y(x0) = y0 ; y(xn) = yn

∆x = xn – x0 ; ∆y = y(xn) – y(x0) = yn – y0

Geradensteigung: m = ∆y / ∆x = [ y(xi) – y0 ] / [ xi – x0 ] i=1,..,n Berechnung der Ordinaten (∈ R) aus Pixelgrößen (∈ N0):

y(xi) = m . (xi – x0) + y0 Folgepixel: y(xi+1) = y(xi+1) = m . (xi +1 – x0) + y0

(3)

Prof. Dr. Aris Christidis

Gl.(A) y(xi+1) – y(xi) = m (xi +1 – x0 – (xi – x0)) + y0 – y0

= m

Ö y(xi+1) = y(xi) + m

= y0 + (i+1) . m

Gerasterte Linien

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 * tnsec/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, ∈ N0) mit Ganzzahl-Arithmetik auf Folgepixel schließen

(4)

Prof. Dr. Aris Christidis

Gerasterte Linien

Jack Elton Bresenham: “Algorithm for Computer Control of a Digital Plotter” (IBM Systems Journal, 1965)

Herleitung für 1. Oktanten (o.B.d.A.): m ≤ 1

Wachstum gerasterter Linie nach Osten oder Nordosten durch Hinzunahme jeweils eines weiteren Pixels.

Richtungsentscheidung (O/NO) anhand der mathematisch exakten Ordinaten y(xi) an der halben Pixel-Breite (Midpoint Algorithm nach M.L.V. Pitteway, 1967)

Erstes ermitteltes Pixel (x1,y1) :

Gl.(A) Ö y(x1) = y(x0+1) = y(x0) + ∆y / ∆x = y0 + m

weiter nach Osten (y1 = y0), wenn y(x0) + ∆y / ∆x < y0 + ½ , 0 < x0 < xn 0 < y0 < yn

∆y ≤ ∆x

d.h., wenn ∆y / ∆x < ½ oder 2∆y – ∆x < 0 ; – sonst weiter nach Nordosten (y1 = y0+1)

(5)

Prof. Dr. Aris Christidis

Gerasterte Linien

Hinzunahme von Folgepixel (i+1), i=1,...,n-1:

Gl.(A) Ö y(xi+1) = y(x0+i+1)

= y0 + (i+1) . ∆y / ∆x Weiter nach Osten (yi+1 = yi),

wenn: y0 + (i+1) . ∆y / ∆x < yi + ½

– sonst weiter nach Nordosten (yi+1 = yi+1) [ yi ist nicht

berechenbar!]

Ost, wenn: (i+1) . ∆y / ∆x < yi – y0 + ½ N := Anzahl bisheriger Nordost-Entscheidungen

= yi – y0

E := Anzahl bisheriger Ost-Entscheidungen [ N, E: nicht berechenbar – aber zählbar ! ]

N + E = i

(6)

Prof. Dr. Aris Christidis

Gerasterte Linien

(Wdhlg.:) Ost, d.h. yi+1 = yi , wenn

(i+1) . ∆y / ∆x < yi – y0 + ½ (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 2y (Ost) bzw. 2.(y–x) (Nordost) erhöht wird.

(7)

Prof. Dr. Aris Christidis

Gerasterte Linien

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!)

(8)

Prof. Dr. Aris Christidis

Gerasterte Linien

Besonderheiten / Vorzüge des Bresenham-Algorithmus

(„Bresenham‘s algorithm for scan-converting straight lines“):

z Nutzung der Tatsache, daß Pixel diskret sind:

xi+1 = xi + 1 Ö xi+j= xi+j Ö y(xj) = y0 + j . m

z Verknüpfung algorithmischer Vorgänge (Entscheidungen) mit Variablen-Werten:

N = yi – y0 ; N + E = i

z Entscheidung über Hinzunahme von Folgepixel anhand des zuletzt gesetzten Pixels (ohne Geraden-Steigung m) z Ganzzahlige Addition und Subtraktion

z Je Linie nur 3 ganzzahlige Multiplikationen mit 2 (Hw!) z Erweiterbar auf Kreise und Ellipsen (in obiger Form)

z Repetierbar u. (grundsätzlich) in der Richtung umkehrbar (wichtig für Löschung mit Hintergrund-Farbe!)

z Läßt in obiger Version den letzten Punkt aus (Polygone:

letzter Punkt = erster Ö Flimmern, Löcher im Papier)

(9)

Prof. Dr. Aris Christidis

Ü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:

z *.obj-Dateien größtenteils mitgeliefert

(pro Fehler-Lokalisierung)

z Aufgaben mit großen Anteilen zur Wiederverwendung

(contra Altlast-Ansammlung)

BresenTable.exe

Referenzen

ÄHNLICHE DOKUMENTE

(1) Man beachte, dass die partiellen Ableitungen im Gegensatz zu den gew¨ ohn- lichen Ableitungen nicht durch Striche (oder Punkte im Falle der zeitlichen Ableitung)

Wir werden in diesem Abschnitt einige wichtige Anwendungen der Taylorschen Formel behandeln: Das totale Differenzial als lineare N¨ aherung, die Fehlerrechnung, die Theorie der

Rentier Rudi versucht sie mit folgendem Vorschlag zu trösten: Man beginne mit einem gleichseitigen Drei- eck mit Seitenlänge a und setze auf die Mitte jeder Seite ein

c) Ein Flugzeug steigt nach dem Start gleichmäßig auf. 3km von der Startbahn entfernt sieht man es in 420m Höhe. In welcher Höhe wird ein Ort überflogen der 22.5 km vom

Wir bitten die allgemeinen Hinweise zur Abgabe von Lösungen (siehe Homepage)

Logische Größen können mit logischen Operatoren und Operationen verknüpft werden, darunter AND, OR, NOT.. Christidis •

Man best¨ atigt nun leicht, dass f¨ ur diese Funktionen tats¨ achlich alle drei Gleichungen erf¨

However, exact T-matrix computations and physical considerations based on the Kirchhoff approximation suggest that this peak is an artifact of GO completely ignoring physical