Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Kreisförmige Bewegung eines Objektes (https://www.delphipraxis.net/76961-kreisfoermige-bewegung-eines-objektes.html)

ErdNussLocke 12. Sep 2006 18:01


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

Dax 12. Sep 2006 18:02

Re: Kreisförmige Bewegung eines Objektes
 
Beim zuweisen Rounden.

Nikolas 12. Sep 2006 18:14

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.

ErdNussLocke 12. Sep 2006 18:41

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.

Cöster 12. Sep 2006 18:47

Re: Kreisförmige Bewegung eines Objektes
 
Zitat:

Zitat von ErdNussLocke
Aber wie lege ich denn die Position fest? Ich kenne nur label1.left:=X; Wenn ich da einen Kommawert eingebe kommt ein Fehler.

Label1.Left := Trunc(X);

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.

Nikolas 12. Sep 2006 18:48

Re: Kreisförmige Bewegung eines Objektes
 
Wo gibts du welchen Wert ein, das welcher Fehler kommt? Was willst du genau machen?

ErdNussLocke 12. Sep 2006 18:53

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 :-/

TStringlist 12. Sep 2006 18:59

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;

benst 12. Sep 2006 19:09

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:
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;
... wenn man XR und YR unterschliedlich groß macht, entsteht eine Ellipse.

ErdNussLocke 12. Sep 2006 19:12

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.
Seite 1 von 3  1 23      

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