Zitat von
benst:
Das habe ich zuerst auch gedacht und das geht vermutlich auch gut. Sauber programmiert ist das aber (wie ich finde) nicht, weil es irgendwann zum Überlauf kommt.
Wenn du jetzt statt der 360 eine schöne Zweierpotenz nutzt, am Besten sogar noch in einen Datentypen perfekt reinpassend (z.B. Byte=256, Word=65536, ... ), dann kannst du das "langsame" MOD auch weglassen und höchstens mit einem netten AND arbeiten
Delphi-Quellcode:
Var Grad: Byte; {0..255}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Inc(Grad, 2);
Label1.left := X0 + round (cos(Pi/128 * Grad) * XR);
Label1.Top := Y0 - round (sin(Pi/128 * Richtung * Grad) * YR);
end;
oder halt mit belibigen Zweierpotenzen und AND:
Delphi-Quellcode:
Var Grad: Integer; {z.B.: 0..1023}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Grad := (Grad + 2) and $03FF;
Label1.left := X0 + round (cos(Pi/512 * Grad) * XR);
Label1.Top := Y0 - round (sin(Pi/512 * Richtung * Grad) * YR);
end;