Algorithm zum Polygonüberwachung

Alles, was sonst nirgendwo reinpasst

Algorithm zum Polygonüberwachung

Beitragvon Stasik » 28.06.07 17:11

Guten Tag,
habe ein Problem,
Möchte sowas wie Vectorgraphik in HTML/JS realisieren. Dazu möchte ich ein Bild mit einem Polygon (gegeben durch die Eckpunkte, relativ zur Ecke des Bildes) überlagern (gespeichert als Array, von Punkten). Ich möchte nun die Überschneidungen mit einem anderen Solchen "Polygon" überwachen (beim Bewegen). Nun, wie löse ich sowas algorithmisch? Ideen? Bücher? Oder soll ich ma einfach ein Lehrstuhl ansprechen?
Gruss und danke für die Hilfe
Sten
3 Träume des Studenten:
Während der Vorlesungen: Mann, wann werde ich endlich essen!
Während des Praktikums: Mann, wann werde ich endlich schlafen!
Während der Klausurphase: Mann, wann werde ich endlich sterben!
Benutzeravatar
Stasik
 
Beiträge: 419
Registriert: 11.04.06 18:16
Studiengang: Informatik (Dipl.)
Studiert seit: SS 06
Anwendungsfach: E-Technik

Beitragvon rootnode » 28.06.07 17:32

also, ein einizges Polygon an sich liegt ja immer in ner Ebene. Also mach mittels der beiden Ebenen der Polygone erstma n groben Test ob sich die Überprüfung überhaupt lohnt. Wenn ja, dann Teste ob die Schnittgerade innerhalb beider Polygone liegt.
Benutzeravatar
rootnode
 
Beiträge: 320
Registriert: 06.02.07 00:59
Wohnort: Aachen, Pontstraße

Beitragvon oxygen » 28.06.07 17:54

Algorithmisch lösen? Das ist ja wohl einfachste Mathematik. Wenn du mal Googlen willst, such doch mal nach Kollisionserkennung.
In einfachen Fällen reicht es wohl auch wenn du eine Bounding Box benutzt, sprich ein einfaches Rechteck dass das Polygon enthält. Bei 2 Rechtecken lässt sich das ganze mit 2 if Abfragen abhandeln.
oxygen
 
Beiträge: 1054
Registriert: 16.12.05 23:05
Wohnort: Bergheim
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: Medizin

Beitragvon Stasik » 28.06.07 17:54

nein, alle liegen in verschiedenen z-ebenen (ist ja html/dom) modell, also ebene ist nicht releveant
3 Träume des Studenten:
Während der Vorlesungen: Mann, wann werde ich endlich essen!
Während des Praktikums: Mann, wann werde ich endlich schlafen!
Während der Klausurphase: Mann, wann werde ich endlich sterben!
Benutzeravatar
Stasik
 
Beiträge: 419
Registriert: 11.04.06 18:16
Studiengang: Informatik (Dipl.)
Studiert seit: SS 06
Anwendungsfach: E-Technik

Beitragvon Stasik » 28.06.07 18:06

oxygen hat geschrieben:Algorithmisch lösen? Das ist ja wohl einfachste Mathematik. Wenn du mal Googlen willst, such doch mal nach Kollisionserkennung.
In einfachen Fällen reicht es wohl auch wenn du eine Bounding Box benutzt, sprich ein einfaches Rechteck dass das Polygon enthält. Bei 2 Rechtecken lässt sich das ganze mit 2 if Abfragen abhandeln.


ja, mit den boundig Boxen habe ich ja schon will das ja html quasi erweitern. Also die linien zu ziehen ist schon nicht so trivial.. aber ich goggel mal
3 Träume des Studenten:
Während der Vorlesungen: Mann, wann werde ich endlich essen!
Während des Praktikums: Mann, wann werde ich endlich schlafen!
Während der Klausurphase: Mann, wann werde ich endlich sterben!
Benutzeravatar
Stasik
 
Beiträge: 419
Registriert: 11.04.06 18:16
Studiengang: Informatik (Dipl.)
Studiert seit: SS 06
Anwendungsfach: E-Technik

Beitragvon Tempest » 28.06.07 18:10

Hast du schon in den Cormen nachgeguckt? Kapitel 33 - Algorithmische Geometrie
- Computational geometry
- Geometric algorithms
- Line segment intersection
- Sweep line algorithm
Benutzeravatar
Tempest
 
Beiträge: 76
Registriert: 13.05.07 22:17
Studiengang: Informatik (M.Sc.)
Studiert seit: SS 07
Anwendungsfach: BWL

Beitragvon Stasik » 28.06.07 18:14

danke für den tipp, irgendwas auch auf deutsch?
3 Träume des Studenten:
Während der Vorlesungen: Mann, wann werde ich endlich essen!
Während des Praktikums: Mann, wann werde ich endlich schlafen!
Während der Klausurphase: Mann, wann werde ich endlich sterben!
Benutzeravatar
Stasik
 
Beiträge: 419
Registriert: 11.04.06 18:16
Studiengang: Informatik (Dipl.)
Studiert seit: SS 06
Anwendungsfach: E-Technik

Beitragvon Tempest » 28.06.07 18:19

Hab 2 Stück von dem Corman (Algorithmen - Eine Einführung, deutsche Ausgabe) im Lehrbuchsammlung gesehen.

Temp
Benutzeravatar
Tempest
 
Beiträge: 76
Registriert: 13.05.07 22:17
Studiengang: Informatik (M.Sc.)
Studiert seit: SS 07
Anwendungsfach: BWL

Beitragvon Coolcat » 29.06.07 10:24

Also wenn es nicht zu sehr auf Performance ankommt brauchst du doch nichts weiter tun, als jede Kante des Polygons mit jeder Kante des anderen Polygons auf Schnitt zu testen.

Polygon 1: Kante A -> B
Polygon 2: Kante C -> D

Code: Alles auswählen
// Geradengleichung aufstellen
p = A;
q = C;
d = B-A;
e = D-C;
// Gleichungssystem aufstellen

M = {\left(\begin{array} d_x & e_x  \\ d_y & e_y \\ \end{array}\right)}
Code: Alles auswählen
if (det(M) == 0) {
    // Geraden sind parallel
    // teste ob A oder B auf q+et liegt
    // teste ob C oder D auf p+ds liegt
}
else {
    // geraden schneiden sich irgendwo, löse LGS
    // (vertausche Zeilen wenn d_y betragsmäßig größer als d_x ist. Frage den lieben Herrn Prof. Esser warum ;) )

M \cdot {\left(\begin{array} s \\ t \\ \end{array}\right)} =<br />{\left(\begin{array} p_x+q_x \\ p_y+q_y \\ \end{array}\right)}
Code: Alles auswählen
    if (0>=t && t<=1 && 0>=s && s<=1) {
        // Geraden schneiden sich bei p + ds
    }
    else {
        // Schnittpunkt außerhalb der Kanten
    }
}


Aufwand ist natürlich O(n^2), geht sicher besser. Aber ich nehme mal an das deine Polygone nicht aus hunderten von Kanten bestehen, daher sollte das doch kein Problem sein.
Möglicherweise macht ein BoundingBox-Test vor dem eigentlichen testen Sinn, wenn die Polygone häufig weit auseinander liegen.

Coolcat
My software never has bugs. It just develops random features.
Benutzeravatar
Coolcat
Promoter
 
Beiträge: 2574
Registriert: 28.11.05 21:26
Wohnort: Kohlscheid / Düsseldorf
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon Stasik » 30.06.07 11:29

ja, ich teste es zwar anders, aber im prinzip geht genau so
3 Träume des Studenten:
Während der Vorlesungen: Mann, wann werde ich endlich essen!
Während des Praktikums: Mann, wann werde ich endlich schlafen!
Während der Klausurphase: Mann, wann werde ich endlich sterben!
Benutzeravatar
Stasik
 
Beiträge: 419
Registriert: 11.04.06 18:16
Studiengang: Informatik (Dipl.)
Studiert seit: SS 06
Anwendungsfach: E-Technik

Beitragvon Ubik » 05.07.07 16:53

Oder benutzt das Separating Axis Theorem - wenn du nach SAT googelst findest du sicherlich genug Material dazu. Allerdings klappt das nur für konvexe Polygone, also müsstest du konkave Polygone in konvexe zerlegen ( dafür gibt's aber auch genug Algorithmen ).
Bild
Ubik
 
Beiträge: 8
Registriert: 28.10.06 18:50

Beitragvon mirko » 05.07.07 18:27

Ubik hat geschrieben:wenn du nach SAT googelst


:lol:
mirko
 
Beiträge: 1032
Registriert: 22.10.06 18:33
Studiert seit: WS 12/13

Beitragvon p0llux » 05.07.07 20:42

Ubik hat geschrieben:wenn du nach SAT googelst findest du sicherlich genug Material dazu.


Und noch vieles mehr ;)
Benutzeravatar
p0llux
Matt Eicheln
 
Beiträge: 841
Registriert: 07.12.05 17:03
Wohnort: Aachen

Beitragvon Stasik » 06.07.07 00:45

hab BuK schon hinter mir, aber danke
3 Träume des Studenten:
Während der Vorlesungen: Mann, wann werde ich endlich essen!
Während des Praktikums: Mann, wann werde ich endlich schlafen!
Während der Klausurphase: Mann, wann werde ich endlich sterben!
Benutzeravatar
Stasik
 
Beiträge: 419
Registriert: 11.04.06 18:16
Studiengang: Informatik (Dipl.)
Studiert seit: SS 06
Anwendungsfach: E-Technik


Zurück zu Off-Topic