1
Kap. 13 Sweep-Line Algorithmen
Kap. 13.1 Schnittprobleme
Menge von Linien-Segmenten der Form (a, 1, 9) oder L:
(
a, (x1, y1), (x9, y9))
Y
X 2
8 1
7 9
3
6 5 4 a
b
c
2
X-Struktur: Anfangspunkte Endpunkte
manche Schnittpunkte
sortiert nach aufsteigenden X-Koordinaten
Y-Struktur: Status an Sweep-Line (SL),
i.e. Linien die SL schneiden sortiert nach Y-Koordinaten des Schnittpunktes mit SL.
(Y-Koord. selbst nicht benötigt)
3
Interessante Vorgänge bei nächstem Punkt bzgl. X-Struktur;
Vorstellung: SL wird bis zum nächsten Punkt in X-Struktur verschoben:
- Anfangspunkt von Linie d:
nehme d in Y-Struktur, i.e. einsortieren - Endpunkt von Linie e:
entferne e aus Y-Struktur - Schnittpunkt von f,g:
vertausche f, g in Y-struktur Schnittpunkte in X-Struktur:
Nur Schnittpunkte von benachbarten Linien bzgl. Y-Struktur, die rechts von SL liegen
4
Lemma: Wenn kleinster “interessanter” Punkt rechts von SL ein Schnittpunkt ist, dann ist er ein Schnittpunkt benachbarter Linien, also in X-Struktur.
Bew: interessante Vorgänge: Linie a muß erst Nachbar b schneiden, bevor a c
schneiden kann!
bei 3 müssen Linien schon in Y-Struktur sein!
1 2 3
a b
c
5
X-Struktur enthält: Punkte rechts von SL, wenn sie:
1. Anfangspunkt einer Linie 2. Endpunkt einer Linie
3. Schnittpunkt zweier benachbater Linien bzgl. Y-Struktur sind.
X-Struktur enthält “interessante” Punkte sortiert nach
X-Koordinate plus Zusatzinfo über Linien, zu denen Punkt gehört
6
Allg. Struktur des Algorithmus:
Nächster Punkt in X-Struktur 1. Anfangspunkt p von c:
- entferne p aus X-Struktur
- füge Linie c in Y-Struktur ein zwischen a und b, d.h.
ändere Nachbarschaften in Y-Struktur
- ersetze Schnittpunkte in X-Struktur, z.B. entferne ab aus X, weil (a,b) nicht mehr benachbart, füge ca und cb ein (liegen rechts von SL, falls existent)
a
p c
b SL
p
c b SL
a
7
2. Endpunkt: q von c
- entferne c aus Y - enferne q aus X
- ab in X eintragen, falls rechts von SL
Hinw: Nachbarschaften in Y-Struktur ändern sich automatisch, da Linien nach Y-Koord. sortiert sind
neue SL SL
b a q
c
3. Schnittpunkt: ab
- entferne ab aus X - vertausche a, b in Y
- neue Schnittpunkt ac und bd mit neuen Nachbarn c, d falls existent und rechts von SL
SL b
a
8
Sweep-Line Alg:
initialisiere X-Struktur mit Anfangs und Endpunkten;
initialisiere Y-Struktur = ;
while X-Struktur do
begin P:= Min (X-Struktur);
{P ist Anfang, Ende oder Schnittpunkt}
transformiere X-Struktur und Y-Struktur abhänging von P
end
tot aktiv schlafend
Y-Struktur repräsentiert nur aktive Linien SL
9
Operationen auf Y: fallen an, wenn nächster Punkt in X-Struktur bearbeitet wird:
Find (P): Finde SL-Intervall, in dem P liegt Insert (L): Einfüge Linie L in Y-Struktur Delete (L): Entferne Linie L aus Y-Struktur Pred (L), Succ (L): beide Nachbarn von L
Interchange (L,L´): vertausche Nachbarn L,L´
) (
)
( L
1SL y L
2L
y
)
( L SL
y
i2
1
L
L
y≺ ≻
Datenstruktur für Y: balanzierter Baum, AVL oder B-Baum Ordnungsrelation für Linien:
wobei: y-Koordinate des Schnittpunktes von Li mit SL
10
Hinw: muß bei Suche in Y-Struktur ausgewertet werden.
SL: X = c
y-koordinate des Punktes P ist bekant y(P) y(LiSL)
y
?Analyse: n Linien, s Schnittp.
In Y-Struktur: sind O(n) Linien, deshalb Einzeloperationen erfordert:
suchen
einfügen je O(log n) Kosten löschen
vertauschen
Ingesamt 2n+s Einzeloperationen (Durchläufe durch while – Schleife)
O ((n+s) log n) Kosten
11
In X-Struktur: sind jeweils höchstens:
2n + n-1
Anfangs – n Schnittpunkte
Endpunkte benachbarter Linien, weil:
1 12 2 23
3 34
O(log n) pro ... ...
Einzeloperation: Min,
einfügen, löschen n n-1n
Insgesamt auch 2n+s Einzeloperationen O ((n+s) log n) Kosten
12
Verwandtes Problem: Zerlegung eines geschlossenen Polygonzuges in zusammenhängende Polyangebiete
Schnittpunkte nach vorherigen Schema X-Struktur wie bisher
Y-Struktur erweitert um Namen für Gebiet zwischen 2 benachbarten Linien und begrenzendem Polygonzug
X1
R0
X3 X4
P1 R2
X0 X2
R1
13
Fall 1:
neue Punktfolge für R´ starten
Fall 2:
Punkt in Folgen aufnehmen
Fall 3:
R1 R3
Punktfolgen für R1, R3 konkatenieren Folge für R3 “umkehren”, z.B.
durch dopellte Verkettung beider
Listen. Details? Gebiet liegt links bw.
rechts von Streckenzug?
R3 R1 R2
R1 R1
R2 R2
R R
R R´
14
Fall 4:
R1 R2
R3 R3 R4 R1
Gesamtkosten: O ((n+s) log n) Details für Wartung der Punktfolgen?
15
Kap. 13.2 Sweep-Line für Nearest Neighbour Begriffe
H(p, q)
b(p, q)
H(q, p) p
q
b(p, q) : Bisektor für p, q teilt Ebene in b(p, q) = b(q, p) 2 Halbebenen H(p, q) : Halbebene, die p enthält
H(q, p) : “ “ q “ H(p, q) H(q, p)
16
die Mittelsenkrechten im Dreieck schneiden sich im einem Punkt = Umkreis Mittelpunkt
. .
. r
1. Teil des Alg: Bestimmung des nächsten Nachbarn nach links:
Voronoi Diagramme für Punktmengen, z.B. für Einzugsbereich von Funktürmen bei Mobilfunk
konvexe Polygone für einzelne Punkte
17
Sweep-Line Invariante:
Schnitt von SL mit Voronoi-Diagramm der Punkte links von SL
Unterteilung von SL in Intervalle, die zu Voronoi-Polygonen von Punkten links von SL gehören
Interessante Ereignisse:
E1 neuer Punkt p
E2 Schnittpunkt von aktiven Bisektoren
18
Aufgabe bei E1 :
1. Bestimme nächsten linken Nachbarn von p, i.e. das q, in dessen Voronoi-Polygon p liegt.
2. Schreibe Voronoi-Polygon fort, wobei p zu Punktmenge links von SL hinzugenommen wird. Aktiviere und
deaktiviere Bisektoren
3. Berechne Unterteilung von SL neu, aber inkrementell.
Aufgabe bei E2 :
1. Aktiviere neuen Bisektor 2. Deaktiviere alte Bisektoren
3. Berechne Unterteilung von SL neu.
neu p
q
r
19
20
21
22
23
24
25
26