Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#30

Re: Break-Game, Kugel auf Rechtecklanden lassen ...

  Alt 30. Jun 2008, 16:24
PtInRect macht folgendes:
Es nimmt einen 2D-Punkt entgegen, und ein Rect. Dann wird die X-Koordinate des Punktes auf größer/kleiner mit der linken/rechten Begrenzung des Rects verglichen, sowie die Y-Koordinate mit der oberen/unteren Grenze. Das ergebnis ist die 4 Vergleiche and-verknüpft.
Das muss man nun für jeden Punkt des zu testenden Objektes machen, und für jeden Punkt den dieses im Laufe der Bewegung einnehmen wird.

Was ich mache ist etwas völlig anderes. Ich nehme den Richtungsvektor des beweglichen Objektes, und erstelle mir eine Gerade auf den Ballmittelpunkt gestütz, setzte diese gleich mit der Gerade die die Kollisionsoberfläche bildet, und erhalte nach lösen des kleinen LGS einen Parameter, der angibt wie oft ich den Richtungsverktor "malnehmen" muss, um auf die Oberfläche zu treffen. Ist der Parameter kleinergleich eins, tritt die Kollision im anstehenden Schritt auf, und mit den dann vorhandenen Daten kann man zudem leicht ein physikalisch korrektes Abprallverhalten trotz mögl. großschrittiger Bewegung errechnen.

Was man mit PtInRect macht ist Pixelweise rumfrickeln, was ich mache ist einfache lineare Algebra. Vorteile letztrer Variante:
- Konstanter Zeitverbrauch (man muss nicht u.U. alle Pixel in einer Diagonalen quer über den Bildschirm abstesten)
- Kollision wird IMMER gefunden, selbst wenn das Objekt so klein/schnell ist, dass es sonst weit über den Kollisionspartner "springen" würde
- Analytischer statt diskreter Ansatz
- Universell einsetzbar (Die Kollisionspartner müssen keine rechtwinkligen Vierecke oder Kugeln sein, auch wenn es die einfachsten Fälle sind)

Nachteile:
- Man muss in der Schule bei Vektorrechnung gerade wach gewesen sein, zumindest halb


Und wie vorher schon erwähnt, kann man in diesem speziellen Fall einige sehr deutliche Vereinfachungen machen, da man immer mit horizontalen Linien Kollidiert, diese keine Eigenbewegung haben, und die Präzision sehr wahrscheinlich ausreichen wird. Wie, hatte ich ja auch schon geschrieben.

Der TE müsste nur mal ein wenig genauer werden als "geht nicht", dann könnte man vermutlich sogar konkret weiter helfen
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat