![]() |
Kreisförmige Bewegung eines Objektes
Hi,
ich will, dass sich ein Objekt, am Besten ein Label, auf dem Forumlar im Kreis bewegt (es soll sich nicht drehen). Hat wer eine Idee? Ich habs mit sin versucht, aber man kann ja nur mit Bogenmaß arbeiten -> keine Kommazahlen in label1.left Danke im Vorraus ErdNussLocke |
Re: Kreisförmige Bewegung eines Objektes
Beim zuweisen Rounden.
|
Re: Kreisförmige Bewegung eines Objektes
Was ist mir Komma-Zahlen in deinem Label? Position einfach per (sin(x),cos(x)) festlegen und dann je nach Vorliebe noch die Funktionen degtorad/RadToDeg benutzen.
|
Re: Kreisförmige Bewegung eines Objektes
Aber wie lege ich denn die Position fest? Ich kenne nur label1.left:=X; Wenn ich da einen Kommawert eingebe kommt ein Fehler.
|
Re: Kreisförmige Bewegung eines Objektes
Zitat:
Trunc rundet X, sodass Label1.Left ein Integer-Wert zugewiesen wird. Falls du einen fertigen Code haben willst, sag Bescheid. Aber vll kriegst du's jetzt ja auch selber hin. |
Re: Kreisförmige Bewegung eines Objektes
Wo gibts du welchen Wert ein, das welcher Fehler kommt? Was willst du genau machen?
|
Re: Kreisförmige Bewegung eines Objektes
Krieg ich nicht hin :( Wenn ich z.B. sin(360) runde kommt ja eins raus, weil das ja noch knapp kleiner is als 1. Aber mit nur 2 Zahlen kann ich ja keine Kreisbewegung simulieren :-/
|
Re: Kreisförmige Bewegung eines Objektes
event. geht es ja so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin // Radius des Einheitskreises = 40 Dots X0 := Label1.left - 40; Y0 := Label1.top; Grad := 0; Timer1.Enabled := true end; procedure TForm1.Timer1Timer(Sender: TObject); begin inc(Grad,2); Label1.left := X0 + round (cos(2*Pi/360 * Grad) * 40); Label1.Top := Y0 - round (sin(2*Pi/360 * Grad) * 40); if Grad = 360 then Timer1.Enabled := false end; |
Re: Kreisförmige Bewegung eines Objektes
@TStringlist: Jetzt war ich auch gerade fertig mit meinem Vorschlag, aber du warst schneller :)
Man kann noch den Radius und die Drehrichtung einbeziehen:
Delphi-Quellcode:
... wenn man XR und YR unterschliedlich groß macht, entsteht eine Ellipse.
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 inc(Grad,2); Label1.left := X0 + round (cos(2*Pi/360 * Grad) * XR); Label1.Top := Y0 - round (sin(2*Pi/360 * Richtung * Grad) * YR); if Grad = 360 then Timer1.Enabled := false end; |
Re: Kreisförmige Bewegung eines Objektes
Danke sehr. Es funktionert! :)
Zwei Fragen noch: Wozu steht die "2" bei "inc(Grad,2)"? Warum bei der "left"+"top"- Zuweisung am Ende *40? Thx |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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 by Thomas Breitkreuz