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 2 von 3     12 3      
Waldteufel
(Gast)

n/a Beiträge
 
#11

Re: Kreisförmige Bewegung eines Objektes

  Alt 12. Sep 2006, 19:16
Hi ErdnussLocke.

Zitat von ErdNussLocke:
Wozu steht die "2" bei "inc(Grad,2)"?
Inc(Grad) heißt: Erhöhe Grad (um 1).
Inc(Grad) heißt: Erhöhe Grad um 2.

Zitat von ErdNussLocke:
Warum bei der "left"+"top"- Zuweisung am Ende *40?
Weil der Sinus nur zwischen 1 und -1 hin- und herschwingt. Das wäre ein ziemlich kleiner Kreis. Deshalb mal 40 (Radius).

Gruß,
Waldteufel
  Mit Zitat antworten Zitat
benst

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

Re: Kreisförmige Bewegung eines Objektes

  Alt 12. Sep 2006, 19:18
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:
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;
(Für sehr große Kreise Grad:=(Grad+1)mod 360, falls es ruckelt.)
  Mit Zitat antworten Zitat
ErdNussLocke

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

Re: Kreisförmige Bewegung eines Objektes

  Alt 12. Sep 2006, 19:18
thx!
Dann hab ichs jetz verstanden!
Danke an euch alle!
Bis zum nächsten Prob
MfG
ErdNussLocke
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

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

Re: Kreisförmige Bewegung eines Objektes

  Alt 12. Sep 2006, 19:28
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))
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
benst

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

Re: Kreisförmige Bewegung eines Objektes

  Alt 12. Sep 2006, 19:30
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.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.926 Beiträge
 
Delphi 12 Athens
 
#16

Re: Kreisförmige Bewegung eines Objektes

  Alt 13. Sep 2006, 13:56
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.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#17

Re: Kreisförmige Bewegung eines Objektes

  Alt 13. Sep 2006, 14:18
Zitat von benst:
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.
Wenn du jetzt statt der 360 eine schöne Zweierpotenz nutzt, am Besten sogar noch in einen Datentypen perfekt reinpassend (z.B. Byte=256, Word=65536, ... ), dann kannst du das "langsame" MOD auch weglassen und höchstens mit einem netten AND arbeiten

Delphi-Quellcode:
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;
oder halt mit belibigen Zweierpotenzen und AND:
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Novilos

Registriert seit: 13. Sep 2006
1 Beiträge
 
#18

Re: Kreisförmige Bewegung eines Objektes

  Alt 13. Sep 2006, 15:44
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
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

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

Re: Kreisförmige Bewegung eines Objektes

  Alt 13. Sep 2006, 15:55
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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#20

Re: Kreisförmige Bewegung eines Objektes

  Alt 13. Sep 2006, 15:58
Schau mal im Tafelwerk, bei Wikipedia, oder sonstwo nach Kreisfunktionen, als sowas schimpfen sich Sinus und Cosinus schließlich
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 10:36 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