![Page 1: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/1.jpg)
1
Computergrafik SS 2016Oliver Vornberger
Vorlesung vom 12.04.2016
noch Kapitel 32D-Grundlagen
![Page 2: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/2.jpg)
2
BresenhamCircle, die 2.
x = 0; y = r;delta = 5.0/4.0 - r;
while (y >= x) {setPixel(x,y);if (delta < 0.0) {delta = delta + 2*x + 3.0;x++;
else {delta = delta+2*x-2*y+5.0;x++; y--;
}
}
d = 1 - r;
(d < 0.0)
d = d + dx;
d = d + dxy;
d:=delta-1/4 dx:=2x+3 dxy:= 2x-2y+5
dx = 3;dxy = -2*r + 5;
dx = dx + 2;dxy = dxy + 2;
dx = dx + 2;
dxy = dxy + 4;
![Page 3: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/3.jpg)
3
Nein1Nein1.25
Nein0Nein0.25
Ja-1Ja-0.75
Ja-2Ja-1.753
Ja-3Ja-2.754
Ja-4Ja-3.755
<01-r<05/4-rr
ddeltaRadius
![Page 4: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/4.jpg)
4
BresenhamCircle, die 3.x=0; y=r; d=1-r; x=3; dx=3; dxy=-2*r+5;while (y>=x){
setPixel(+x,+y);
if (d<0) {d=d+dx; dx=dx+2; dxy=dxy+2; x++;} else {d=d+dxy; dx=dx+2; dxy=dxy+4; x++; y--;}
}
setPixel(+y,+x);setPixel(+y,-x);setPixel(+x,-y);setPixel(-x,-y);setPixel(-y,-x);setPixel(-y,+x);setPixel(-x,+y);
Source: ~cg/2016/skript/Sources/drawBresenhamCircle.javJava-Applet: ~cg/2016/skript/Applets/2D-basic/App.html
![Page 5: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/5.jpg)
5
Ellipse um (0,0)parametrisiert
b
a
x = a · cos(α) y = b · sin(α)
α
U ≈ 2πq
12 (a
2 + b2) A = πab
![Page 6: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/6.jpg)
6
Reflektion
αα
![Page 7: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/7.jpg)
7
1. Keplersches Gesetz
Die Planeten umkreisen die Sonne auf einer Ellipse
![Page 8: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/8.jpg)
8
2. Keplersches Gesetz
In gleichen Zeiten überstreicht der Fahrstrahl gleiche Flächen
![Page 9: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/9.jpg)
9
3. Keplersches Gesetz
Die Quadrate der Umlaufzeiten verhalten sichwie die Kuben der großen Halbachsen
(T1T2 )2 = (a1a2 )
3
![Page 10: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/10.jpg)
10
Kegelschnitt: Kreis
Abstand zu einem Punkt ist konstant
x2 + y2 = 1
![Page 11: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/11.jpg)
11
Kegelschnitt: EllipseSumme der Abstände zu 2 Punkten
ist konstant
x2
a2 +y2
b2 = 1
![Page 12: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/12.jpg)
12
Kegelschnitt: ParabelAbstand zu Punkt und Gerade
ist gleich
y = ax2 + bx+ c
![Page 13: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/13.jpg)
13
Kegelschnitt: HyperbelDifferenz der Abstände zu 2 Punkten
ist konstant
x2
a2 −y2
b2 = 1
![Page 14: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/14.jpg)
14
![Page 15: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/15.jpg)
15
Kapitel 4:2D-Füllen
Computergrafik SS 2016
Oliver Vornberger
![Page 16: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/16.jpg)
16
Füllverfahren
• Universelle Füllverfahren(Zusammenhangseigenschaften)
• Scan-Line-Verfahren(Geometrie)
![Page 17: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/17.jpg)
17
Universelle Füllverfahren
4-way-stepping 8-way-stepping
Beginnend beim Saatpixel:
färbe alle Nachbarn, bis Umgrenzung erreicht ist.
![Page 18: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/18.jpg)
18
Probleme beim universellen Füllen
4-way-stepping 8-way-stepping
![Page 19: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/19.jpg)
19
Rekursives Füllenboolean rangeOK(x,y) true, falls Punkt x,y
innerhalb des Bildbereichs
boolean getPixel(x,y) true, falls Vordergrundfarbe an Punkt x,y
void setPixel(x,y) setze Vordergrundfarbe an Punkt x,y
public void boundaryFill(int x, int y){if (rangeOk(x,y) && !getPixel(x,y)){
setPixel(x,y);boundaryFill(x+1,y);boundaryFill(x, y+1);boundaryFill(x-1,y);boundaryFill(x, y-1);
}
~cg/2016/skript/Applets/2D-basic/App.html
![Page 20: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/20.jpg)
20
Scan-Line-Verfahren
Bewege waagerechte Scan-Line von oben nach unten über das Polygon und färbe entsprechendeAbschnittsgeraden
![Page 21: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/21.jpg)
21
Scan-Line-Verfahren: Detail
1. Sortiere Kanten nach größtem y-Wert
2. Bewege Scan-Line von oben nach unten
3. für jede Position der Scan-Line:ermittele aktive Kantenberechne Schnittpunkte mit Scan-Linesortiere die Schnittpunkte nach x Wertenfärbe abwechselnd zwischen Schnittpunkten
![Page 22: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/22.jpg)
22
Scan-Line-Verfahren: Beispiel
A
B C
DE
FG
H
I J
![Page 23: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/23.jpg)
23
Problemfälle
doppelt doppelt einfach
![Page 24: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/24.jpg)
24
Schnittpunkte fortschreiben
yi − yi+1 = 1
xi+1 = xi − 1s
yi+1
yi
xi+1xi
xi − xi+1 = yi−yi+1s
s = yi−yi+1xi−xi+1
~cg/2016/skript/Applets/2D-basic/App.html
![Page 25: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/25.jpg)
25
Datenstruktur für Kantepublic class Edge {
int y_top; // groesster y-Wertint delta_y; // Ausdehnung in y-Richtungdouble delta_x; // inverse Steigungdouble x_int; // errechneter SchnittpunktEdge next; // Verweis auf naechste Kante
}
first laste
if (e.delta_y) > 0) {e.delta_y--;e.x_int = e.x_int – e.delta_x;e = e.next;
}
~cg/2016/skript/Applets/2D-basic/App.html
![Page 26: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/26.jpg)
26
Scan-Line-Verfahren für Kreis
![Page 27: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/27.jpg)
27
Dither-Matrix: Definition
Eine n x n Dithermatrix enthält gleichmäßig verteilt alle Zahlen aus dem Intervall [0..n2 -1]
0 8 2 10
12 4 14 6
3 11 1 9
15 7 13 5
Für Grauwert 0 ≤ k ≤ n2
schwärze alle Pixel mit Eintrag < k
![Page 28: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/28.jpg)
28
Dither-Matrix: Beispiel
0 8 2 10
12 4 14 6
3 11 1 9
15 7 13 5
![Page 29: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/29.jpg)
29
Dither-Matrix: Konstruktion
Dn =
µ4 ·Dn−1 + 0 · Un−1 4 ·Dn−1 + 2 · Un−14 ·Dn−1 + 3 · Un−1 4 ·Dn−1 + 1 · Un−1
¶
D1 =
µ0 23 1
¶D2 =
⎛⎜⎜⎝0 8 2 1012 4 14 63 11 1 915 7 13 5
⎞⎟⎟⎠
Un = n × n - Matrix, besetzt mit 1D0 = (0)
⎛⎜⎜⎝0 8 0 812 4 12 40 8 0 812 4 12 4
⎞⎟⎟⎠⎛⎜⎜⎝0 0 2 20 0 2 23 3 1 13 3 1 1
⎞⎟⎟⎠
![Page 30: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/30.jpg)
30
Dither-Matrix: Aufruf
if (D[x%N][y%N] < k)
setPixel(x,y);
else
delPixel(x,y);
Gegeben N × N Dithermatrix D.
Einfärben an Position (x,y) mit Grauwert k:
~cg/2016/skript/Applets/2D-basic/App.html
![Page 31: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/31.jpg)
31
Punkt in Polygoncn=1
cn=7
cn=3
cn=2 cn=4P
P
![Page 32: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/32.jpg)
32
Kreuzungszahl berechnen
Sei S der von P nach rechts gehende StrahlFür jede Polygonkante von P1 nach P2:falls P1 und P2 oberhalb: kein Schnittpunktfalls P1 und P2 unterhalb: kein Schnittpunktfalls P1 und P2 auf verschiedenen Seiten:berechne Schnittpunkt Q mit Sfalls rechts von P: erhöhe Kreuzungszahl
P SQ
![Page 33: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/33.jpg)
33
Schnittpunkt berechnen
f(x) = y
y = y2 − y1x2 − x1
· x+ x2·y1 − x1·y2x2 − x1
f(x) = y2−y1x2−x1 · x+
x2·y1−x1·y2x2−x1
P
x
x = y·(x2−x1)−x2·y1+x1·y2y2−y1
P1
P2
![Page 34: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/34.jpg)
34
public boolean contains (int x, int y)x1 = xpoints[n-1]; y1 = ypoints[n-1];x2 = xpoints[0]; y2 = ypoints[0];boolean inside = false;boolean startUeber = y1 >= y ? true : false;for (i=1; i<n; i++) {
boolean endUeber = y2 >= y ? true : false;if ((startUeber != endUeber &&(double)(y*(x2-x1)- x2*y1 + x1*y2)/(y2-y1)>=x))
inside = !inside; startUeber = endUeber;y1=y2; x1=x2; x2=xpoints[i]; y2=ypoints[i];
} return inside;
![Page 35: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/35.jpg)
35
![Page 36: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/36.jpg)
36
Kapitel 5:2D-Clipping
Computergrafik SS 2015
Oliver Vornberger
![Page 37: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/37.jpg)
37
2D-Clipping
![Page 38: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/38.jpg)
38
Clipping von Linien
ymax
yminxmin xmax
![Page 39: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/39.jpg)
39
Region Code: Definition
ymax
ymin
xmin xmax
10001001
0001
0101 01100100
0010
1010
Bit 0: links Bit1:rechts Bit2: unten Bit3: oben
0000
![Page 40: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/40.jpg)
40
Region Code: Berechnungprivate static final byte CENTER = 0;private static final byte LEFT = 1;private static final byte RIGHT = 2;private static final byte BOTTOM = 4;private static final byte TOP = 8;public byte region_code (int x, int y) {
byte c = CENTER;if (x < xmin) c = LEFT; if (x > xmax) c = RIGHT;if (y < ymin) c = c | BOTTOM;if (y > ymax) c = c | TOP;return c;
}
![Page 41: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/41.jpg)
41
Cohen & Sutherland
10001001
0001
0101 01100100
0010
1010
0000P1
P2
falls code(P1) && code(P2) ≠ 0 komplett außerhalbfalls code(P1) || code(P2) = 0 komplett innerhalbsonst: berechne Schnittpunkt Q und teste Restlinie erneut
QP2
P1
![Page 42: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/42.jpg)
42
Schnittpunkte
Q.y-P1.yP1
xmin
QP2
Q.x - P1.x
slope = (double)(P2.y - P1.y)/(P2.x - P1.x);Q.x = xminQ.y = (int)(Q.x-P1.x)*slope + P1.y
slope = P2.y−P1.yP2.x−P1.x
slope = Q.y−P1.yQ.x−P1.x
![Page 43: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/43.jpg)
43
Cohen-Sutherland
boolean cohen_sutherland(Point P1, Point P2,Point Q1,Point Q2){
// clippt Gerade P1,P2 am Fenster// liefert true, falls sichtbar// liefert in Q1,Q2 den sichtbaren Teil...}
![Page 44: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/44.jpg)
44
Clipping von Polygonen
![Page 45: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/45.jpg)
45
Problem bei Clip-Fenster-Ecken
![Page 46: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/46.jpg)
46
Sutherland & Hodgman
für jeden Polygonpunkt Pi:
falls Pi sichtbar: übernimm Pi
falls Kante von Pi zu Pi+1 E schneidet:übernimm Schnittpunkt
für eine Clipping-Gerade E
![Page 47: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/47.jpg)
47
4 Clipping-Kanten
0
3
2
1
![Page 48: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/48.jpg)
48
Sichtbarkeitstest
boolean On_Visible_Side(Point P, int wert, int fall) {
switch (fall) {case 0: return (P.x >= wert);case 1: return (P.y >= wert);case 2: return (P.x <= wert);case 3: return (P.y <= wert);
}}
![Page 49: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/49.jpg)
49
Schnittpunktboolean intersection(
Point P1, Point P2,int wert, int fall, Point I) {
... P1_vis = On_Visible_Side(P1,wert,fall);P2_vis = On_Visible_Side(P2,wert,fall);...slope =(double)(P2.y-P1.y)/
(double)(P2.x-P1.x);if (fall %2 == 0) {
I.x = (int) wert;I.y = (int)(wert-P1.x)*slope + P1.y;
...
![Page 50: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/50.jpg)
50
Aufruf von Sutherland_hodgman
int n; // Zahl der EckpunktePoint[] points; // Polygon
n = sutherland_hodgman(n, points, xmin, 0);n = sutherland_hodgman(n, points, ymin, 1);n = sutherland_hodgman(n, points, xmax, 2);n = sutherland_hodgman(n, points, ymax, 3);
![Page 51: Computergrafik SS 2016 Oliver Vornberger Vorlesung vom 12 ...cg/2016/PDF/cg-2016-04-12.pdf · Scan-Line-Verfahren Bewege waagerechte Scan-Line von oben nach unten über das Polygon](https://reader033.vdokument.com/reader033/viewer/2022042313/5edd4fbbad6a402d66685b96/html5/thumbnails/51.jpg)
51
4 x Clippen
~cg/2016/skript/Applets/2D-basic/App.html