Schneidet Kreis mit Rechteck?
-
Moin moin.
Ich suche nach einer Möglichkeit, herauszufinden ob sich ein Kreis mit einem Rechteck schneidet oder nicht.
Ich verstehe leider selber zu wenig von Geometrie, als das ich das Problem ohne Hilfe lösen könnte.Bekannt sind Mittelpunkt und Radius vom Kreis, sowie die vier Punkte des Rechteckes. Das Rechteck hat eine Drehung von 0°, ist also gerade.
Kann mir jemand bei diesem Problem helfen, oder gibt es bereits lösungsansätze hierfür?
Grüsse
Chiller
-
Ist der Kreis und das Rechteck als ausgefülltes Objekt zu verstehen, oder geht es nur um die Ränder? Im ersten Fall: Es gibt die Fälle Mittelpunkt im Rechteck oder nicht. Wenn ja, dann bist Du fertig, wenn nicht, dann ist es ein wenig Geometrie-Fummelei. Musst Du die Schnittfläche bestimmen, oder reicht nur die Information ob sie sich schneiden?
-
Du kannst z.B. die Kreisgleichung und die Gleichung für die Seiten des Rechtecks gleichsetzen und dann auflösen.
Kreis (mit Radius r um (mx,my)):
(x-mx)2+(y-my)2=r^2
Vertikale Gerade
x=x0Das gibt (wenn ich mich nicht verrechnet habe)
(y-my)2=r2-(x0-mx)^2
y_{1,2}=+-sqrt(r2-(x0-mx)2)+myWenn es Schnittpunkte gibt, und sie innerhalb der Rechtecksseite liegen, schneiden sich die beiden.
Das kannst du jetzt fuer alle 4 Seiten ueberpruefen.
-
So, die Berechnung läuft.
Wer wissen will wofür ich es gebraucht habe... Schaue hier.
Ich habe es für die kollisionsberechnung zwischen Avatar und Wände gebraucht und siehe da, es läuft.Sobald ich den Code etwas besser gestalltet habe und sauber kommentiert werde ich ihn evt. hier raufladen.
Edit:
Weil ich die Seite abgeändert habe, musste ich den Link ändern.
Der Originale Link verweist auf eine Java Applet Sammlung: hierGrüsse
Chiller
-
kurze Frage,
und was soll ich damit machen?
-
froschn schrieb:
kurze Frage,und was soll ich damit machen?
Das weiss ich nicht, aber...
Es gibt soweit ich gesehen habe keine Methode in Java welche rausfinden kann ob ein Kreis ein Rechteck schneidet oder nicht.
Also wenn du wissen willst ob ein Kreis mit einem Rechteck schneidet kannst du meine Funktion verwenden.Das nur mal so als Idee.
Grüsse
Chiller
-
mmmmmmmhhhhhhhhhhhhhh o.k. ...dann weiss ich ja wem ich fragen kann wenn ich mal in die verlegenheit komme rausfinden zu müssen ob ein dreieck sich mit einem kreis schneidet