![]() |
Re: Kreisförmige Bewegung eines Objektes
Hi ErdnussLocke.
Zitat:
Inc(Grad) heißt: Erhöhe Grad um 2. Zitat:
Gruß, Waldteufel |
Re: Kreisförmige Bewegung eines Objektes
Für kontinuierliches Drehen:
Anstatt: Inc(Grad, 2); folgendes: Grad:=(Grad+2) mod 360; ... und if Grad = 360 then Timer1.Enabled := false weglassen. Also so:
Delphi-Quellcode:
(Für sehr große Kreise Grad:=(Grad+1)mod 360, falls es ruckelt.)
procedure TForm1.Button1Click(Sender: TObject);
begin XR := 40; YR := 40; X0 := Label1.left - XR; Y0 := Label1.top; Grad := 0; Richtung := 1 //1 = mathematische pos. Drehsinn (gegen Uhrzeigersinn), -1 = entsprechend anders herum Timer1.Enabled := true end; procedure TForm1.Timer1Timer(Sender: TObject); begin Grad:=(Grad+2) mod 360; Label1.left := X0 + round (cos(2*Pi/360 * Grad) * XR); Label1.Top := Y0 - round (sin(2*Pi/360 * Richtung * Grad) * YR); end; |
Re: Kreisförmige Bewegung eines Objektes
thx!
Dann hab ichs jetz verstanden! Danke an euch alle! Bis zum nächsten Prob ;) MfG ErdNussLocke |
Re: Kreisförmige Bewegung eines Objektes
Das mod ist aber völlig überflüssig. Die Sinusfunktion ist doch schön periodisch (sin(alpha)=sin(alpha+360°) oder sin(x)=sin(x+2 pi))
|
Re: Kreisförmige Bewegung eines Objektes
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.
|
Re: Kreisförmige Bewegung eines Objektes
Naja, "sauber" programmiert wäre es, alle x und y eines 1/4 Kreises zu speichern
und den Rest durch Spiegelung an der X- und/oder der Y-Achse zu ermitteln. Das schont den Prozessor....Sin und Cos ist nicht mal eben so ermittelt. |
Re: Kreisförmige Bewegung eines Objektes
Zitat:
Delphi-Quellcode:
oder halt mit belibigen Zweierpotenzen und AND:
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;
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; |
Re: Kreisförmige Bewegung eines Objektes
Zitat:
Danke sehr |
Re: Kreisförmige Bewegung eines Objektes
naja, 2pi/360*Grad verwandelt Grad von Rad zu Deg, wie du Funktion RadtoDeg. also 0-360 -> 0-2pi. Die 40 ist der Radius des Kreises.
Wie sin und cos am Einheitskreis definiert sind, kannst du in der WIkipedia lesen. |
Re: Kreisförmige Bewegung eines Objektes
Schau mal im Tafelwerk, bei Wikipedia, oder sonstwo nach Kreisfunktionen, als sowas schimpfen sich Sinus und Cosinus schließlich :zwinker:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:47 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