Einzelnen Beitrag anzeigen

Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#16

Re: Form einer Parabel folgen lassen

  Alt 14. Jun 2009, 17:52
Hey - Danke!

Das Ding schaut ja echt heiss aus

[Edit]
Hier mal mein Code:

Delphi-Quellcode:
  private
    { Private-Deklarationen }
    P0 : TPoint;
    P1 : TPoint;
    P2 : TPoint;

    count: Integer;

{ ... }

procedure TSplashScreenForm.FormActivate(Sender: TObject);
begin
  //Positionen für die Bézierkurve angeben
  P0.X := Left; //Startposition X
  P0.Y := Top; //Startposition Y
  P2.X := 50; //Endposition X
  P2.Y := 50; //Endposition Y
  P1.X := (P0.X - P2.X) div 2; //Kontrollpunkt X
  P1.Y := (P0.Y - P2.Y) div 2; //Kontrollpunkt Y

  //prüfen welche Position von P0 oder P2 größer ist, und dann diese Position
  //auf P1 draufrechnen
  If P0.Y > P2.Y then
    P1.Y := P1.Y + P0.Y
  else
    P1.Y := P1.Y + P2.Y;

  //Variablen vordefinieren
  count := 1;
end;

procedure TSplashScreenForm.Timer_BewegungTimer(Sender: TObject);
var
  t: Real;

begin
  If Count <= 10 then
    begin
      //Bézierkurve berechnen
      //Formel: C(t) = (1 - t)² * P0 + 2 * t * (1 - t) * P1 + t² * P2
      //http://de.wikipedia.org/wiki/B%C3%A9zierkurve#Quadratische_B.C3.A9zierkurven_.28n.3D2.29

      t := Count / 10;

      Left := Round(Sqr(1 - t) * P0.X + 2 * t * (1 - t) * P1.X + Sqr(t) * P2.X);
      Top := Round(Sqr(1 - t) * P0.Y + 2 * t * (1 - t) * P1.Y + Sqr(t) * P2.Y);

      //Variable um eins erhöhen
      inc(count);
    end
  else
    begin
      //Timer beenden
      Timer_Bewegung.Enabled := false;
    end;
end;
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat