Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
Delphi XE2 Professional
|
Re: Form einer Parabel folgen lassen
14. Jun 2009, 18: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! <<
|