Flash/JavaScript: Kollision zwischen Kreis & Rechteck pixelgenau
Christine
- programmiertechnik
0 Maxx0 Stephan Huber
Hallo!
Ich habe ein Problem:
in Flash kann ich abfragen, ob zwei Objekte kollidieren (hitTest), dabei werden aber nur die Boundary Boxen gerechnet, was ungenau ist, da ich einen Kreis und ein Rechteck habe.
Gut zu sehen hier:
http://www.virtual-fx.net/tutorials/html/hittest.html
Zwei Kreise wären auch kein Problem, ein Beispiel wäre hier:
http://www.flashkit.com/movies/Scripting/Maths/Circle_h-Robert_J-7118/index.php
Auch nicht zwei Rechtecke, weil dann die Boundary Boxen gleich den Rechtecken wären.
Aber einen Kreis und ein Rechteck, das bekomme ich nicht hin, beide Scripte zu einem zu schreiben scheint mir keine Lösung zu sein.
Kann mir jemand weiterhelfen?
Gruss und Kuss,
Tin
Hallo Christine,
in Flash kann ich abfragen, ob zwei Objekte kollidieren
Aber einen Kreis und ein Rechteck, das bekomme ich nicht hin
Ich würde etwa so anfangen .....
Du hast 2 Punkte im Koordinatensystem (x1, y1) der Mittelpunkt des Kreises und (x2, y2) der Punkt der getestet werden soll. Die Entfernung der beiden Punkte voneinander auszurechnen ist kein Problem. Es handelt sich hierbei um ein rechtwinkliges Dreieck. Und wenn die Entfernung <= Radius ... HIT!
Grüße
Maxx
Das reicht leider nicht, da der gesamte Bereich eines Rechteckes so nicht erfasst wird...
Das reicht leider nicht, da der gesamte Bereich eines Rechteckes so nicht erfasst wird...
ja, tut mir leid. Das liegt vermutlich an meinem fortgeschrittenen Alter. Ich habe nicht richtig gelesen. Oder gelesen und nicht richtig verstanden?
Aber: Zumindest für ein unendlich kleines Rechteck funktioniert es ;-)
Maxx
Hallo Christine,
Stell Dir das Problem einfach so vor:
| |
--------
O |XX|
--------
| |O
Das "XX" ist Dein Rechteck. Die "-" und "|" sind die verlängerten Seitenlinien, die "O" sind die Kreise. Dann brauchst Du Fallunterscheidungen für die 9 Quadranten, die sich ergeben. Der erste Fall, Kreismittelpunkt innerhalb der Rechtecks, ist trivial, dann hast Du nochmal eine grundlegende Unterscheidung, wenn der Kreismittelpunkt in einem der horizontal oder vertikal neben dem Rechteck liegenden Quadranten ist, dann vergleichst Du die X bzw.Y-Koordinaaten des entsprechenden Eckpunkts mit dem Mittelpunkt + bzw. - Radius, im Quadranten links neben dem Rechteck also die X-Koordinaaten der linken Eckpunkte mit der X-Koordinaate des Kreises, die Y-Koordinaate spielt keine Rolle, weil der Kreis ja irgendwo auf der Linie schneiden kann.
In den Quadranten, die schräg ober/unter den Ecken liegen, rechnest Du die Entfernung der direkten Linie zum jeweiligen Eckpunkt aus, wenn die kleiner ist als der Radius, schneidet der Kreis.
Viele Grüße
Stephan