Christine: Flash/JavaScript: Kollision zwischen Kreis & Rechteck pixelgenau

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

  1. 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

    1. Das reicht leider nicht, da der gesamte Bereich eines Rechteckes so nicht erfasst wird...

      1. 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

  2. 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