Delphi-PRAXiS
Seite 3 von 3     123   

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)

Cöster 13. Sep 2006 14:59

Re: Kreisförmige Bewegung eines Objektes
 
Zitat:

Zitat von Novilos
Zitat:

Zitat von TStringlist
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;

Kann mir wer die Rechnung erklären? Wie das mit Sin und Cos genau abläuft? Versteh ich nicht so ganz :)
Danke sehr

Der Sinus eines Winkels ist Gegenkathete durch Hypothenuse. Die Hypothenuse ist der Radius des Umlaufkreises. Der ist in dem Beispiel 40. Sin(Winkel)*40 ist also die länge der Gegenkathete bei einem Winkel und dem Radius 40. Es berechnet, wie weit die Y-Position des Labels sich über dem Mittelpunkt des Kreise befindet. Ist der Sinus negativ, befindet sich das Label unterhalb des Mittelpunktes.
Cos ist Ankathete/Hypothenuse und berechnet das gleiche für die X-Position.
Die Winkel, von denen der Cosinus bzw. Sinus berechnet wird, müssen in Delphi immer in Bogenmaß statt in Grad sein. Deswegen 2*Pi/360*Grad. Das könnte man alternativ auch mit DegToRad(Grad) machen.

TStringlist 13. Sep 2006 15:46

Re: Kreisförmige Bewegung eines Objektes
 
Hier nochmal ein ganz trivialer Erklärungsversuch: Du kennst doch bestimmt die Sache mit dem Einheitskreis und dem rechtwinkligen Dreieck darin. Die Hypotenuse dieses Dreieckes ist dabei nämlich immer der Kreis-Radius, der, wenn der Winkeln zur X-Achse langsam aber stetig zunimmt, dann natürlich auch jeden Punkt auf dieser Kreisbahn berühren kann. Und um nun rechnerisch zu diesen Punkten auf der Kreisbahn zu kommen, brauchst man jetzt nur noch mehr zu einer Ausgangsposition diejenigen Längen dazuaddieren, die dieser Radius (=Hypotenuse) jeweils auf die X- u. auf die Y-Achse projiziert ergibt. Und genau diese Projektionslängen sind nunmal die Ergebnisse dieser Sinus- und Kosinus-Funktionen... (Wie die jetzt mathematisch genau definiert sind, wird ja schon teilweise darüber beschrieben)


edit: Die obige Erklärung gilt, wenn die dort erwähnte Ausgangsposition (X0/Y0) immer der Kreismittelpunkt ist ...und daher musste das X0 vor dem eigentlichen Start des Timers dann eben auch immer zuerst noch auf diesen Kreismittelpunkt umgesetzt werden muss (X0 := Label1.left - 40)! ~~~ nur der absoluten Nachvollziehbarkeit halber ~~~


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 Uhr.
Seite 3 von 3     123   

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