![]() |
Re: Form einer Parabel folgen lassen
Gut, dass man das auch mal erfährt ;) ...
Bei meiner Formel startet die Form im Parabelscheitel. Wenn das nicht so sein soll, musst du schon festlegen, wie weit sie sich erst nach unten bewegen soll. |
Re: Form einer Parabel folgen lassen
Zitat:
Ich dachte eher so: Der Mittelpunkt zwischen Start-Position und Endposition ist der Parabelscheitel. Dir Form bewegt sich erst in den Scheitel und kommt dann zur Endposition |
Re: Form einer Parabel folgen lassen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ansonsten bräcuhte ich wie gesagt nur eine Angabe, wie tief der Scheitel liegen soll, der X-Wert ergibt sich dann von selbst. Im Anhang mal, wie ich es verstanden habe. Parameter sind rot: Anfang, Ende, Scheitel-Y |
Re: Form einer Parabel folgen lassen
Wäre ein angebbarer Y-Scheitelwert kompliziert?
Die Form sollte halt nicht aus dem Screen rausbewegt werden. Also immer sichtbar - und nicht am Screen-Bottom anstoßen |
Re: Form einer Parabel folgen lassen
Zitat:
Wie wäre es mit einer ![]()
Delphi-Quellcode:
procedure TSplashScreenForm.Timer_BewegungTimer(Sender: TObject);
var t: Real; begin If Count < 10 then begin t := Count / 10; Left := Round(Sqr(1-t) * P0.X + 2 * t * (1-t) * P1.X + Sqr(t) * P2.X); Top := ... |
Re: Form einer Parabel folgen lassen
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz