Zitat von
gordon freeman:
Delphi-Quellcode:
if {Kugel am oberen Rand} or {Kugel am unteren Rand} then
y:=y*(-1);
if {Kugel am linken Balken} or {Kugel am rechten Balken} then
x:=x*(-1);
Die Schrittweite ist doch garnicht 1
. Die ist hier beliebig gehalten -> das *(-1) dreht doch nur das Vorzeichen.
Sagen wir mal:
xStep = 1
yStep = 2
(also der Koordinatenzuwachs pro Cycle)
Bei einer Refelxion an der unteren Kante wird nun "yStep=yStep*(-1)" gemacht, und dann haben wir:
xStep = 1
yStep = -2
Der Winkel ist
nicht 45°, aber trotzdem korrekt reflektiert.
\\edit: Genau so mache ich das im Übrigen auch bei meinem
Gravitationssimulator, und das klappt. Da hatte ich auch erst wilde Vektorrechnung drin, bis ich gemerkt hab dass es ja bei den einfachen Begrenzungen auch einfacher geht
. (Würde man allerdings die Kugeln voneinander abprallen lassen, dann wird die ganze Sache ungleich komplizierter, das stimmt.)
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel