![]() |
Re: Kugel/Kreis prallt von Eck/Kante ab
und wie findet man am besten herraus, ob man kolidiert?
|
Re: Kugel/Kreis prallt von Eck/Kante ab
Einfach mithilfe von Sinus/Cosinus und Radius ausrechnen.
|
Re: Kugel/Kreis prallt von Eck/Kante ab
abstand von was zu was???
wenn ich wüsste welche Punkte ich mir angucken müsste wäre ich schon fertig |
Re: Kugel/Kreis prallt von Eck/Kante ab
Also: Du hast eine Menge von Punkten P, bei denen du auf Kollision überprüfen willst.
Jetzt berechnest du für jeden Punkt Q aus P mithilfe des Hypotenusensatzes den Abstand PM wobei dein Kreis k(M;r) ist. Wenn PM<=r, dann war das eine Kollision. |
Re: Kugel/Kreis prallt von Eck/Kante ab
nun das sind aber sehr sehr viele Punkte...
|
Re: Kugel/Kreis prallt von Eck/Kante ab
geht das auch anders?
|
Re: Kugel/Kreis prallt von Eck/Kante ab
Eine Kugel prallt NIE auf zwei Ecken gleichzeitig. Und wenn Doch, dann prallt sie halt auf eine zuerst. Sprich Du berechnest den Abprall von der einen Ecke und mit dem neuen Richtungsvektor dann den Abprall an der andern. Das ist dann genausogut, als wäre sie gleichzeitig an beiden abgeprallt, was sie ja eh NIE tut.
|
Re: Kugel/Kreis prallt von Eck/Kante ab
und welche zuerst macht keinen unterschied?
Edit: mit der gerade fand ich schon gut, aber kann man die kollision nicht auch anhand anderer methoden testen? |
Re: Kugel/Kreis prallt von Eck/Kante ab
Die Frage ist eben, ob du für den Kreis eine Bewegungsgleichung aufstellst und die dann mit den Punkten schneidest, oder ob du den Kreis immer ein kleines Stückchen verschiebst und dann auf Kollision testest.
Erste Methode ist dann sinnvoll, wenn du nur einen Kreis hast oder, wenn die Orte aller abprallrelevanter Punkte von Beginn der Simulation feststehen. Dann kannst du mit einer recht einfachen Rechung überprüfen, an welchen Punkt der Kreis als erstes kommt und auch, ob mehrere Punkte gleichzeitig getroffen werden. Bei der zweiten Methode musst du nach jedem Umsetzen den Pythagoras benutzen (@Borg: wo hast du hier einen Hypothenusensatz?), bei dem du auch überprüfen kannst, welcher Punkt als erster getroffen wurde. |
Re: Kugel/Kreis prallt von Eck/Kante ab
Zitat:
Zitat:
Zitat:
Erstmal prüfen, ob eine der Kanten berührt wird. Das ist denke ich relativ einfach:
Delphi-Quellcode:
Dann die Kollisionsabfrage für jede der Ecken:
function CollidesWithEdge(const Circle: TCircle; Rect: TRect): Boolean;
begin result := { vertikale Kanten } ((Circle.Center.X + Circle.Radius > Rect.Left) and (Circle.Center.X - Circle.Radius < Rect.Right) and (Circle.Center.Y > Rect.Top) and (Circle.Center.Y < Rect.Bottom)) or { horizontale Kanten } ((Circle.Center.Y + Circle.Radius > Rect.Top) and (Circle.Center.Y - Circle.Radius < Rect.Bottom) and (Circle.Center.X > Rect.Left) and (Circle.Center.X < Rect.Right)); end;
Delphi-Quellcode:
function CollidesWithVertex(const Circle: TCircle; Rect: TRect): Boolean;
begin result := { obere linke Ecke } (Circle.Radius > Hypot(Circle.Center.X - Rect.Left, Circle.Center.Y - Rect.Top)) or { obere rechte Ecke } (Circle.Radius > Hypot(Circle.Center.X - Rect.Right, Circle.Center.Y - Rect.Top)) or { untere linke Ecke } (Circle.Radius > Hypot(Circle.Center.X - Rect.Left, Circle.Center.Y - Rect.Bottom)) or { untere rechte Ecke } (Circle.Radius > Hypot(Circle.Center.X - Rect.Right, Circle.Center.Y - Rect.Bottom)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz