Question Mathématique [Résolu]

Messages postés
135
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
25 juillet 2008
- - Dernière réponse : ELCouz
Messages postés
135
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
25 juillet 2008
- 31 mars 2008 à 22:49
Bonjour,

J'aimerais savoir quel formule je dois utiliser pour faire un effet realiste quand je click sur un bouton pour allonger la form en height ?

Es-ce que sa se pourais que sa soit logarithmique ? si je fait une loop avec une valeur fixe
example:

Loop 200 fois (pour allonger de 200 px par en bas)
form1.height := form1.height + 1
sleep(10);
fin loop

C'est trop lineaire ,, je veut mettre un peu deffet speciaux dans mon programme :)...

Je suis moyen en maths. Je ne sais pas quel formule mathematique pourrais me donner un resultat du type graviter ...
c-a-d accelerer en parabole et decelerer en parabole...

Merci d'avoir pris le temps de lire mon topic

Laurent
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
1078
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
3
Merci
Salut,
Si ton niveau en maths te permet de comprendre (ou du moins d'utiliser) ces formules d'easing, alors tu as tout ce qui te faut sous la main.

http://www.gizma.com/easing/

En tout cas, c'est une bible pour les effets réalistes, avec un flash pour tester rapidement, c'est le top.
A mon avis, c'est un effet quadratique qu'il te faut.

++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 217 internautes nous ont dit merci ce mois-ci

Commenter la réponse de florenth
Messages postés
1078
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
3
Merci
Code à utiliser :
var
T: Integer;
OrigH: Extended;
begin
OrigH := Height;
for T := 0 to MaxT do
begin
Height := easeInOutQuad(T, OrigH, +100, MaxT);
Sleep(10);
end;

OrigH := Height;
for T := 0 to MaxT do
begin
Height := easeInOutQuad(T, OrigH, -100, MaxT);
Sleep(10);
end;
end;

Donc :

t = temps actuel, si tu n'as pas de timer tu utilises alors ton index de boucle !! (comme dans le code ci-dessus)
b = valeur de départ, donc Height
c = changement, donc +50 si tu veux augmenter Height de 50 ou -50 si tu veux le diminuer de 50 pixels !
d = temps total, pareil, sans timer tu mets l'index total de la boucle.

Pour la traduction :

t /t/2 > t := t / (d / 2.0);
t-- ==> t := t - 1.0;

Pour le reste c'est compréhensible je pense.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 217 internautes nous ont dit merci ce mois-ci

Commenter la réponse de florenth
Messages postés
135
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
25 juillet 2008
3
Merci
wow merci ... j'ai du regler quelque petit probleme mais le code marche bien...

voila le resultat pour les interesser !

procedure TForm1.Button1Click(Sender: TObject);
var
  T,MaxT,OrigH: Integer;
begin
  MaxT := 100;
  OrigH := form1.Height;
  for T := 0 to MaxT do
  begin
    form1.Height := easeInOutQuad(T, OrigH, 200, MaxT);
    Sleep(10);
  end;

end;

function TForm1.easeInOutQuad(ti,bi,ci,di:integer):integer;
var
t,b,c,d:single;
begin
t:=ti;
b:=bi;
c:=ci;
d:=di;
t := t / (d / 2.0);
if t < 1 then result:= round(c/2*t*t + b)
else
  begin
  t := t - 1.0;
  result:= round(-c/2 * (t*(t-2) - 1) + b);
  end;
end;

Delphi se plaignais pour la conversion integer vers extended... je lui ai regler sa assez vite son probleme
j'ai utiliser des singles a place moins precis mais de toute facon form1.height ne prend que des integers donc a la fin jarrondi le tout :)

Bonne journee et merci encore de votre aide

Laurent

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 217 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ELCouz
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
0
Merci
Salut cousin,

j'sais pas si ça fait un truc parabolique, mais ça m'étonnerait (en tout cas, c'est simple): 

  var i : Integer;
  begin
  for i := 1 to 14 do begin
    form1.Height := form1.Height +i;
    sleep(10);
  end;
  for i := 14 downto 1 do begin
    form1.Height := form1.Height +i;
    sleep(10);
  end;
Commenter la réponse de Caribensila
Messages postés
135
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
25 juillet 2008
0
Merci
oui tu a raison , c'est leffet quadratique !

le seul hic c'est que oui je sais comment adapter partiellement la formule pour delphi...

Math.easeInOutQuad = function (t, b, c, d) {
t /= d/2;
if (t < 1) return c/2*t*t + b;
t--;
return -c/2 * (t*(t-2) - 1) + b;
};

t = temps --> ?? comment je procede sous delphi , il ny a pas de frames ni temps comme dans une animation flash!

b = valeur depart dans scas si le height original dla form

c = «change in value» ce qui veut dire ? a combien jveu arriver metton form height maximale ? ou plus le chiffre est haut plus sa va incrementer plus vite???

d = le temps que sa dure ... encore la... un petit coup de main svp

Merci beaucoup pour ce magnifique site florenth!!

Bonne journee a tous !

Laurent
Commenter la réponse de ELCouz
Messages postés
135
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
25 juillet 2008
0
Merci
Pour les debutants qui ne veulent pas se cassé la tete le code et avoir un example concret... je vous ai fait un petit demo avec bouton qui decide de la direction a prendre (monter ou descendre selon letat).

http://rapidshare.com/files/103888496/form_up_down_quadratic.zip.html

taille:6K

Bonne journee
Laurent
Commenter la réponse de ELCouz