Kollision Rechteck/Kreis?



  • WebFritzi schrieb:

    @Abbadon: Ich finde das nicht so einfach. Ich habe jedenfalls lange gegrübelt...

    Wenn man Lust hat zu grübeln, dann kann man das ja machen. Aber auch ohne zu grübeln kommt man ans Ziel:
    1. Teil die Ebene in 9 Teile auf, die Grenzen sind die Geraden die durch die Seiten des Rechtecks gehen.
    2. Wenn der Mittelpunkt des Kreises im Rechteck liegt ist alles klar. Ansonsten vergleiche den Abstand vom Mittelpunkt des Kreises zur jeweiligen Seite des Rechtecks bzw. zum jeweiligen Eckpunkt des Rechtecks, jenachdem in welchem Teil der Ebene der Mittelpunkt liegt.

    Wenn man es eleganter haben will, dann muss man eben grübeln.



  • Das Problem an deiner Lösung ist, dass sie keine ist. Du benutzt Ausdrücke wie "jeweiligen Seite des Rechtecks" oder "jeweiligen Eckpunkt des Rechtecks". Was soll das sein? Wie soll das jetzt jemand programmieren? Oder sagen wir's mal so: Programmiere mir das mal! Los. Wenn's so einfach geht... bitte.



  • 😕
    Mit "jeweiligen Seite des Rechtecks" meine ich natürlich die Seite die an den jeweiligen Teil der Ebene angrenzt, genauso bei den Eckpunkten.



  • Erstens ist deine Formulierung "Ebene" sehr irreführend. Ich würde mal sagen: "Segment" oder so... Naja, und jedes der 9 Segmente ist aber durch 3 Geraden bestimmt. Welche davon nehme ich denn nun?



  • du stellst dich aber wirklich dämlich an...



  • *LOL* Wenn du meinst... Du hast meine Frage aber leider noch nicht beantwortet. Oder gibst du dich geschlagen?



  • WebFritzi schrieb:

    Erstens ist deine Formulierung "Ebene" sehr irreführend. Ich würde mal sagen: "Segment" oder so...

    Ich weiss nicht was an Ebene irreführend sein soll, das ist ein gängiger Begriff.

    WebFritzi schrieb:

    Naja, und jedes der 9 Segmente...

    Wo kommen denn aufeinmal 9 Segmente her? Ich dachte du meinst mit Segment die Ebene???

    WebFritzi schrieb:

    ...ist aber durch 3 Geraden bestimmt. Welche davon nehme ich denn nun?

    Nehmen?? Wozu?



  • OK, mit Ebene meinst wohl den ganzen R2\mathbf{R}^2. Verlängern wir nun jede Strecke des Rechtecks zu einer Geraden, so entstehen 9 "Teile", die die Ebene teilen. Nennen wir diese Teile "Segmente", OK?

    Mit "jeweiligen Seite des Rechtecks" meine ich natürlich die Seite die an den jeweiligen Teil der Ebene angrenzt, genauso bei den Eckpunkten.

    Was ist der "jeweilige Teil der Ebene"? Wir betreiben hier Mathematik, mein Junge. Da muss alles ganz genau definiert sein.



  • WebFritzi schrieb:

    Was ist der "jeweilige Teil der Ebene"? Wir betreiben hier Mathematik, mein Junge. Da muss alles ganz genau definiert sein.

    In meinem etwas misslungenem Satz steht:

    Abbadon schrieb:

    ...,jenachdem in welchem Teil der Ebene der Mittelpunkt liegt

    Damit sollte eigentlich klar sein was mit dem "jeweiligen Teil der Ebene" gemeint ist. Oder etwa nicht?



  • OK. Ich glaube, ich habe dich endlich verstanden. Ich zeichne mal auf:

    |             |
          A     |     B       |        C
                |             |
    -------------------------------------------------
          D     |/////////////|        E
                |/////////////|
    -------------------------------------------------
                |             |
          F     |     G       |        H
                |             |
    

    Ich habe die Teile mal mit Buchstaben benannt. Liegt der Mittelpunkt des Kreises nun in A, C, F oder H, dann ist klar, dass die jeweilige Ecke zu überprüfen ist, ob sie im Kreis liegt. Liegt der Mittelpunkt in B, D, G oder E, dann muss man prüfen, ob die jeweilige Seite des Rechtecks durch den Kreis verläuft. Wie macht man das? Einfach die Seite als Gerade auffassen und deren Abstand zum Mittelpunkt berechnen (analytische Geometrie). Ist dieser Abstand kleiner als der Radius, gibt es eine Kollision - sonst nicht.
    Ich finde aber trotzdem meine Lösung besser, denn es gibt nur 4 Fallunterschiede (OK, insgesamt 6). Außerdem scheint mir der Rechenaufwand etwas geringer.

    @Abbadon: Versuch doch das nächste mal, einfach das, was du meinst, verständlich rüberzubringen.


Anmelden zum Antworten