AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kreisförmige Bewegung eines Objektes

Ein Thema von ErdNussLocke · begonnen am 12. Sep 2006 · letzter Beitrag vom 13. Sep 2006
Antwort Antwort
Seite 1 von 3  1 23      
ErdNussLocke

Registriert seit: 30. Jan 2006
104 Beiträge
 
#1

Kreisförmige Bewegung eines Objektes

  Alt 12. Sep 2006, 18:01
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
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Kreisförmige Bewegung eines Objektes

  Alt 12. Sep 2006, 18:02
Beim zuweisen Rounden.
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Kreisförmige Bewegung eines Objektes

  Alt 12. Sep 2006, 18:14
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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
ErdNussLocke

Registriert seit: 30. Jan 2006
104 Beiträge
 
#4

Re: Kreisförmige Bewegung eines Objektes

  Alt 12. Sep 2006, 18:41
Aber wie lege ich denn die Position fest? Ich kenne nur label1.left:=X; Wenn ich da einen Kommawert eingebe kommt ein Fehler.
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Kreisförmige Bewegung eines Objektes

  Alt 12. Sep 2006, 18:47
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.
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Kreisförmige Bewegung eines Objektes

  Alt 12. Sep 2006, 18:48
Wo gibts du welchen Wert ein, das welcher Fehler kommt? Was willst du genau machen?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
ErdNussLocke

Registriert seit: 30. Jan 2006
104 Beiträge
 
#7

Re: Kreisförmige Bewegung eines Objektes

  Alt 12. Sep 2006, 18:53
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 :-/
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Kreisförmige Bewegung eines Objektes

  Alt 12. Sep 2006, 18:59
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;
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
benst

Registriert seit: 20. Jun 2004
155 Beiträge
 
Delphi 5 Standard
 
#9

Re: Kreisförmige Bewegung eines Objektes

  Alt 12. Sep 2006, 19:09
@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.
  Mit Zitat antworten Zitat
ErdNussLocke

Registriert seit: 30. Jan 2006
104 Beiträge
 
#10

Re: Kreisförmige Bewegung eines Objektes

  Alt 12. Sep 2006, 19:12
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz