Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Lissajous-Figuren (https://www.delphipraxis.net/70715-lissajous-figuren.html)

Xenonz 3. Jun 2006 12:30


Lissajous-Figuren
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo!

Ich habe angefangen die Lissajous-Figuren in Delphi darzustellen. Das ganze soll wie ein Oszilloskop funktionieren. Daher verwende ich einen Timer. Wenn das Programm läuft flackert jedoch immer das image.

Hat jemand eine Idee wie man das Flackern verhindern kann?

Mfg Xenonz

MrKnogge 3. Jun 2006 12:32

Re: Lissajous-Figuren
 
hast du mal Form1.Doublebuffered := true probiert ?

Luckie 3. Jun 2006 12:40

Re: Lissajous-Figuren
 
Zeichne auf ein Bitmap im Speicher und kopiere das Bitmap bei Bedarf auf den Canvas deiner Form oder der Paintbox.

Xenonz 3. Jun 2006 14:13

Re: Lissajous-Figuren
 
Ah perfekt,
doublebuffered funktioniert genau richtig!

Vielen Dank für die Antwort! Ist wie immer ein super Forum!

Der_Ventilator 3. Jun 2006 15:25

Re: Lissajous-Figuren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn dir das was hilft, ich hab vor 2 Jahren (12. Klasse Physik) auch mal so ein Programm geschrieben...

Luckie 3. Jun 2006 15:40

Re: Lissajous-Figuren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Und hier meine 8 KB Version. :mrgreen:

Wann ist die Figur eigentlich fertig gezeichnet? (Damit man den Timer abstellen kann.)

Der_Ventilator 3. Jun 2006 15:49

Re: Lissajous-Figuren
 
Irgendwann müsste sie zum Ausgangspunkt zurückkehren (ist ja eine Sinusfunktion)

Aber ich hab keine Ahnung mehr wie man das mathematisch berechnet(Schule ist doch schon so einiges her...)

Luckie 3. Jun 2006 16:06

Re: Lissajous-Figuren
 
Wenn der Winkel 360° ist, dann ist die Figur fertig. In minem ersten Posting die neue Version.

Xenonz 3. Jun 2006 23:01

Re: Lissajous-Figuren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm nachdem mein Programm vorhin als ich geantwortet hatte schon fast fertig
war, hab ich nicht mehr hier geschaut...

Naja hier ist mein fertiges Programm

idontwantaname 3. Jun 2006 23:36

Re: Lissajous-Figuren
 
Könnte man eventuell die Geschwindingkeit von dem Ding ein bisschen runtersetzen ??
Weil das düst ganz schön ab ^^

turboPASCAL 4. Jun 2006 10:38

Re: Lissajous-Figuren
 
Liste der Anhänge anzeigen (Anzahl: 3)
Zitat:

Zitat von Der_Ventilator
Wenn dir das was hilft, ich hab vor 2 Jahren (12. Klasse Physik) auch mal so ein Programm geschrieben...

Zitat:

Zitat von Luckie
Und hier meine 8 KB Version. :mrgreen:

Zitat:

Zitat von Xenonz
Hmm nachdem mein Programm vorhin als ich geantwortet hatte schon fast fertig
war, hab ich nicht mehr hier geschaut...

Naja hier ist mein fertiges Programm

Und das kann sich sehen lassen. :thumb:


Das soll es ja auch als 3D geben oder ? :mrgreen:

Luckie 4. Jun 2006 13:49

Re: Lissajous-Figuren
 
Zitat:

Zitat von turboPASCAL
Das soll es ja auch als 3D geben oder ? :mrgreen:

Wenn dann bitte mit Source. ;)

turboPASCAL 4. Jun 2006 14:05

Re: Lissajous-Figuren
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von turboPASCAL
Das soll es ja auch als 3D geben oder ? :mrgreen:

Wenn dann bitte mit Source. ;)

Ist leider kein nonVCL und dann noch mit GLScene.
Im Grunde der selbe Code wie bei Luckie, nur noch ein Sinus in die "Z"-Richtung.
Den Sourcecode pack ich noch bei.

Luckie 5. Jun 2006 22:09

Re: Lissajous-Figuren
 
Und wie hast du das sinusz beim Line zeichnen mit einbezogen:

Delphi-Quellcode:
  sinusx := trunc(sin(Pi * i * a / 180) * 180);
  sinusy := trunc(-sin(Pi * i * b / 180) * 180);
  LineTo(hdcMem, sinusx + (WINDOWWIDTH div 2), sinusy + (WINDOWHEIGHT div 2));

turboPASCAL 5. Jun 2006 22:17

Re: Lissajous-Figuren
 
Delphi-Quellcode:
procedure TForm1.DrawLissajous(x, y, z: Single);
var
  sinX, sinY, sinZ, Pi_ : single;
  step: Integer;
begin
  GLLines1.Nodes.Clear;

  for step := 0 to 360 do
  begin
    sinX := sin(Pi * step * x / 180) * 180;
    sinY := -sin(Pi * step * y / 180) * 180;
    sinZ := sin(Pi * step * z / 180) * 180;

    GLLines1.Nodes.Add.AsAffineVector :=
      AffineVectorMake(sinX / 100, sinY / 100, sinZ / 100);
   
   if step mod 10 = 0 then // a little Speed
      Application.ProcessMessages;

    Label7.Caption := Format('X: %8.2f; Y: %8.2f; Z: %8.2f', [sinX, sinY, sinZ]);

    if CancelCalculate then Break;
  end;

  GLSceneViewer1.Refresh;
end;
So.

Einfach ein Sinus in die z-Richtung. Ob das korrekt ist bin ich noch am nachforschen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:43 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