Testen, ob zwei Bereiche sich überschneiden?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Wanderer

Betreff: Testen, ob zwei Bereiche sich überschneiden?

BeitragMo, Nov 22, 2004 12:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann mir jemand einen Tipp geben, wie ich testen kann, ob sich zwei Rechtecke (die auch 'gedreht' sein können) irgendwo überlappen? Jedes Rechteck wird hierbei durch vier Eckpunkte definiert, wobei RectsOverlap nicht funktioniert, da die Rechtecke ja auch rotiert sein können.

Eventuell mit Vektoren?

Hubsi

BeitragMo, Nov 22, 2004 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
So auf Anhieb würd ich die Rechtecke in Images speichern, evtl. drehen und mit ImagesCollide prüfen. die mathematische Methode wurde schonmal erklärt, wenn ich mich recht entsinne.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Wanderer

BeitragMo, Nov 22, 2004 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Die 'Rechtecke' sind eigentlich 3D-Quads, bei denen (aus welchem Grund auch immer) MeshesIntersect() nicht funktioniert (vielleicht, weil sie keine Tiefe haben??), deswegen muss ich irgendwie mit den Koordinaten der Vertices arbeiten Sad

Eine Suche bringt leider nichts, da ich nicht weiss, nach welchem Keyword ich suchen soll -und weil man hier das Keyword leider auch nicht auf die Titel beschränken kann, kommen viel zu viele Treffer.

Ich habe auch schon versucht, einfach nur jeden der vier Punkte eines Rechtecks in das Koordinatensystem des anderen Rechtecks zu übetragen und abzufragen -aber das funktioniert nur, wenn einer der Eckpunkte auch wirklich im anderen Rechteck liegt. Wenn nur die 'Kante' zwischen zwei Punkten im anderen Rechteck liegt, wird das so nicht erkannt. Dazu müsste ich jeden einzelnen Punkte der Fläche abfragen -was sicherlich Unsinn wäre, den das ganze müsste doch auch mit einer 'Mengenformel' oder so zu lösen sein.

Grübel...

Hubsi

BeitragMo, Nov 22, 2004 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Als Suchwörter bieten sich Recht* überschneiden an, dazu der Punkt 'Nach allen Begriffen suchen' .
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Wanderer

BeitragMo, Nov 22, 2004 15:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Keine brauchbaren Ergebnisse -weder hier, noch bei Blitzcoders, noch im Blitzforum, noch über Google. Keywords: Quads, overlap, intersect, areas etc.. -glaubst du mir jetzt? Wink

Jan_

Ehemaliger Admin

BeitragMo, Nov 22, 2004 15:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Www.Blitzbase.de
Und dann schaust du, ob sich die 4 Linien Kreuzen.
between angels and insects
 

Edlothiol

BeitragMo, Nov 22, 2004 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Jan_: Das würde noch nicht reichen, was wenn ein Rechteck komplett im andern ist?

Du müsstest testen können, ob sich ein Punkt in einem gedrehten Rechteck befindet, indem du den Punkt erst "zurück" drehst (also mit dem negativen Drehwinkel des Rechteckes) und dann schaust, ob er innerhalb des Bereiches des Rechteckes ist - das ist ja nicht schwer. Dann teste einfach alle Punkte jedes Rechteckes, ob sie sich im anderen befinden. Vielleicht reicht es auch, alle Punkte des einen und nur einen Punkt des anderen Rechteckes zu testen.
Die Formeln zum Drehen gibts irgendwo hier im Forum, da bin ich mir sicher, ich werd auch gleich mal suchen.

Edit: Gefunden: https://www.blitzforum.de/view...ehen+punkt

Jan_

Ehemaliger Admin

BeitragMo, Nov 22, 2004 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, dann testet man noch mit Point in Area von Blitzbase.de, ob er drinne ist.
between angels and insects
 

Wanderer

BeitragMo, Nov 22, 2004 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit dem 'zurückrotieren' wird recht kompliziert - vor allem, wenn man bedenkt, das auch BEIDE Rechtecke gedreht sein können. Was dann? Hier mal ein paar Beispiele:

user posted image

Ich denke immer noch, daß man das mit Vektoren lösen könnte (z.B. testen, ob Linien sich überkreuzen) -oder irgendwie als 'Punktmengen', die sich schneiden -aber wie setzt man das um? Question
 

Wanderer

BeitragMo, Nov 22, 2004 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich Idiot Smile Klappt doch - man muß nur BEIDE Rechtecke nacheinander gegentesten. Und jeweils die Punkte eines Rects in das Koordinatensystem des anderen TFormen. -Keep it simple!
 

Wanderer

BeitragDi, Nov 23, 2004 12:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Mist! Da gibt es doch noch ein Problem: wenn zwei längliche Rechtecke wie ein 'Kreuz' übereinander liegen, also keiner der Eckpunkte in der Fläche des anderen liegt, funktioniert das nicht...

Es muß doch möglich sein, die Überschneidung / Überlappung von Flächen mit einer Formel zu testen. Crying or Very sad

Jan_

Ehemaliger Admin

BeitragDi, Nov 23, 2004 12:17
Antworten mit Zitat
Benutzer-Profile anzeigen
LESEN BILDET

Jan_ hat Folgendes geschrieben:
Www.Blitzbase.de
Und dann schaust du, ob sich die 4 Linien Kreuzen.


Dort Quellcodes dann Linien Test und du hast es, Schaga!
between angels and insects

Blatolo

BeitragDi, Nov 23, 2004 15:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Jan_ hat Folgendes geschrieben:
LESEN BILDET

Jan_ hat Folgendes geschrieben:
Www.Blitzbase.de
Und dann schaust du, ob sich die 4 Linien Kreuzen.


Dort Quellcodes dann Linien Test und du hast es, Schaga!

Das könnte man zu dir sagen.
Was ist wenn ein Rechteck komplett in einem anderen steckt?

Jan_

Ehemaliger Admin

BeitragDi, Nov 23, 2004 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ähm, Balato, Lesen Bildet,
1. Was habe ich darauf schonmal oben geschrieben?
2. Klingt es nciht so, als ob er diese Version schon beseitigt hat?
between angels and insects

TheShadow

Moderator

BeitragDi, Nov 23, 2004 15:46
Antworten mit Zitat
Benutzer-Profile anzeigen
dann musst du rechteck in 2 dreicke aufteilen und die punkt-in-3eck-routine dafür für jeden endpunkt verwenden
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group