Kollision Kugel mit polyeder



  • Wie kann man eine Kollision zwischen einer Kugel und einem polyeder festellen?

    Ich weiss, wie man mit der Sep. Axis Theorie polyeder-polyeder Kollisionen festellt, aber wie geht das mit einer Kugel?



  • Edit: Schnell alles weg. Ich schrub Mist. 😉



  • Nähesten Punkt auf dem Polyeder feststellen (kD-Tree verwenden), wenn Abstand kleiner Radius -> Schnitt.

    Wenn der Polyeder konvex ist, gegen alle half-spaces testen, wenn der Abstand kleiner Radius -> Schnitt.

    Sonnst kannst du noch deinen nicht konvexen Polyeder in konvexe Polyeder zerlegen und gegen die testen oder das ganze nocht mit einer Beschleunigungsstruktur kombinieren

    Gruss
    Jochen



  • was meinst du mit half space





  • hab ich schon, aber ich kapiers trozdem nicht



  • Mach das ganze mal im zweidimensionalen für ein konvexes Polygon und einen Kreis. Von da ist es dann einfach zu konvexem Polyeder und Kugel.



  • also ich hab das jetzt so verstanden:
    bei dem Polygon alle Trennachsen herausfinden, wie bei einem Normalen Polygon.
    bei der Kugel den punkt herausfinden, der am weitesten und der der am wenigsten weit in die reichtung der Trennachse liegt.

    das dann mit allen Trennachsen.

    Ist das Richtig so?



  • Wenn du gucken willst, ob ein Punkt in einem zweidimensionalen konvexen Polygon liegt, gilt folgendes:
    Jede Kante trennt deinen Raum in zwei Hälften. Eine davon ist für diese Gerade sicher außerhalb des Polygons. Ein Punkt ist innerhalb eines Polygons wenn er für jede Kante nicht außerhalb liegt.

    Wenn du keinen Punkt, sondern einen Kreis hast, ist der auf keinen Fall komplett außerhalb des Polygons wenn sein Mittelpunkt nicht außerhalb liegt.
    Wenn der Mittelpunkt außerhalb liegt, prüfst du noch für jede Kante, in deren "outside-Raumhälfte" er liegt, ob der Abstand vom Mittelpunkt zur geraden größer als der Radius des Kreises ist. Ist das einmal nicht gegeben, gibt's nen Schnitt.

    Wenn du das ganze in 3d haben willst, ersetze
    Polygon -> Polyeder
    Kreis -> Kugel
    Kante -> Fläche
    Linie -> Ebene
    😉

    Edit: Ist dein Polyeder denn überhaupt konvex? Wenn nicht, geht das natürlich nicht. Dann könntest du es mit ray casting probieren.



  • ich glaub ich habs, danke.


Anmelden zum Antworten