Kollision von 2 Rechtecken
-
und wie kann ich überprüfen, ob sich 2 linien schneuiden?
-
hast du ein koordinatensystem?
-
ja, ich habe eines.
-
perfekt. also einfach die eckpunkte der rechtecke bestimmen...
die rechtecke schneiden sich, wenn ein eckpunkt des einen rechtecks im anderen rechteck zu finden ist.
reicht das als ansatz für dich? überleg mal weiter jetzt... oder verwende otzes methode, die ist auch nicht schlecht.
-
aaalso, da gibts zwei ähnliche methoden...
- mit vektoren
du faßt eins der rechtecke jetzt als zusammensetzung zweier rechtwinkliger dreiecke auf, die katheten dieser rechtecke seien vektoren.
jetzt stellst du ebenengleichungen auf, jeweils eine für jedes kathetenpaar, wobei die spannvektoren jeweils von ihrem stützpunkt wegzeigen. innerhalb dieser gleichungen tauchen ja jetzt parameter vor den spannvektoren auf. jetzt nimmst du die eckpunkte des anderen rechtecks und prüfts bei jedem, ob er element BEIDER ebenen ist, unter der bedingung, daß die paramter vor den spannvektoren STETS NICHTNEGATIV sind.
- ohne vektoren
du stellst für jede rechtecksseite eines der rechtecke die gleichung der geraden auf, deren element die seite ist. aus den geradengleichungen ist die lage der geraden ersichtlich. da es sich um parallele geraden handelt, ist die bedingung für einen innenliegenden eckpunkt leicht zu ersehen.
-
ich würde die 2. variante bevorzugen, weil ich vekotoren nicht mag (nicht versteh')
aber könntest du mir die 2. variante nochaml genauer erklären?
-
naja, ich bin mir nicht sicher, wie ichs beschreiben soll (außerdem läßt sich bestimmt methode nr. 1 besser programmieren)...
also: wir nehmen mal als beispiel das rechteck mit den ecken A(0|1), B(2|0), C(4|4) und D(2|5) (hoffe, ich hab mich nicht verkopfrechnet).
jetzt stellst du vier geradengleichungen auf, so daß die funktionsgraphen die rechtecksseiten beinhalten.
dann begrenzt du den definitionsbereich der geraden so, daß die rechtecksseiten übrigbleiben.
ob jetzt ein punkt innerhalb des rechtecks liegt, prüfst du so:
du suchst zur x-koordinate des fraglichen punkts die rechtecksseiten aus, für die das x im definitionsbereich der geraden liegt. handelt es sich also um den punkt P(3|3), dann wählst du die geraden der seiten BC und DC.
jetzt überprüfst du, ob der funktionswert an der stelle x größergleich ist als der der geraden durch BC UND kleinergleich als der der geraden DC.-------------------------------------------------------------------------
mal ne reine interessensfrage: ist im LaTeX- modus eigentlich auch picture verfügbar? dann könnte man sich nämlich diese beschreibungspfriemelei sparen und das ganze einfach zeichnen...
-
und glaub mir: du solltest unbedingt die vektorrechnung erlernen, denn damit fällt einiges sehr viel einfacher...
-
Es geht doch nur um ein Rechteck, wobei x/y-Punkte der linken oberen Ecke und Hoehe und Breite angegeben sind, d.h. das Rechteck hat nur Seiten, die alle parallel zu den Koordinatenachsen sind?
Dann ist es einfach: Rechtecke 1 und 2 gegeben als x1/y1/w1/h1, x2/y2/w2/h2 (x/y/width/height)
(((x1 > x2) und (x1 < x2+w2)) oder ((x2 > x1) und (x2 < x1+w1)))
und
(((y1 > y2) und (y1 < y2+h2)) oder ((y2 > y1) und (y2 < y1+h1)))
=> rechtecke ueberschneiden sich.
-
es steht nirgendwo, daß die seiten parallel zu koordinatenachsen sind.
außerdem hab ich gerade mal mit meinen bescheidenen fähigkeiten das problem implementiert... das programm funktioniert einwandfrei, und es ist allgemein für ein viereck. setzt also kein rechteck voraus.
-
scrub schrieb:
es steht nirgendwo, daß die seiten parallel zu koordinatenachsen sind.
Ich hoere es aber da heraus:
gegeben sind jeweils x, y, höhe und breite der beiden rechtecke.