Eine Reflektion an waagerechten oder senkrechten Linien ist eigentlich ganz einfach.
Ein Ball hat in x- und y-Richtung eine bestimmte Geschwindigkeit.
Diese kann positiv oder negativ sein und sollte eine Flieskommazahl
(oder Festkommazahl) sein.
Trifft der Ball auf eine senkrechte Wand ändert sich nur die Geschwindigkeit in x-Richtung:
speed_x := speed_x * (-1.0); // bzw. speed_x := -speed_x
Bei einer waagerechten Wand gilt das analog für die Y-Geschwindigkeit.
Nur wenn die Reflektionsebene schräg zum Koordinatensystem stehen braucht man die trig. Funktionen.
Hier ungetestet eine Reflektion an einer senkrechten Wand:
Delphi-Quellcode:
// neue Position berechnen
ball_x := Round(ball_x+speed_x);
ball_y := Round(ball_y+speed_y);
// 500 ist der X-Wert der senkrechten Wand
if ball_x > 500 then
begin
// ball ist quasi nach rechts durch die Wand geschlagen
// also muss er genau um dieses Stückchen zu viel zurückgespiegelt werden
ball_x := ball_x - 2 *(ball_x-500); // spiegeln
speed_x := -speed_x; // die neue Geschwindigkeit
end;