John Dogget
Messages postés384Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention 7 mai 2009
-
25 juin 2007 à 15:57
edisson81
Messages postés5Date d'inscriptionmercredi 12 janvier 2005StatutMembreDernière intervention22 juillet 2010
-
2 juil. 2007 à 11:28
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
edisson81
Messages postés5Date d'inscriptionmercredi 12 janvier 2005StatutMembreDernière intervention22 juillet 2010 2 juil. 2007 à 11:28
c'est mieux c'est tu ajoute DoubleBuffered := True ;-)
@+
Francky23012301
Messages postés400Date d'inscriptionsamedi 6 août 2005StatutMembreDernière intervention11 février 20161 27 juin 2007 à 15:49
aie aie aie aie : Pourquoi tu décompes Barbichette ? je blagues ^^.
Non il y a deux beugs :
1)Si tu saisit 1 (chose que l'on peut faire) dans SEforce, tu as le droit a une bonne grosse exception pointant.
2) Si tu saisit 5000 : tu as une grosse trame noire au fond qui apparait (et elle est bien visible).
Je me souviens pas de la première version mais il me semble que ca ramait moins (car là ca rame un ptit peu beaucoup quand même). Je me trompe peut etre de raison mais je trouve cette version moins bleuffante que la première. : est ce pour ca j'en sais rien.
Par contre c'est drolement instructif comme code (puis c'est bien indenté ;)).
@+
Albedo039
Messages postés18Date d'inscriptionmercredi 8 novembre 2006StatutMembreDernière intervention31 janvier 2008 26 juin 2007 à 14:10
Naalsoo :)) Sieht schon viel besser aus.
Habe noch "eine" Bitte (um Zeilen 427-432):
5 Mal "rect(1,1,wi-2,he-2)"
kann man doch irgendwie aufmotzen, oder?
cs_barbichette
Messages postés220Date d'inscriptionlundi 30 octobre 2000StatutMembreDernière intervention15 juillet 2013 26 juin 2007 à 00:15
ben voilà, j'ai pris un peu de temps pour optimiser le tout.
Juste un truc, pour les "shr 2" à la place des "div 4", c'était pas toujours possible puisqu'on travail avec des nombres signés. En assembleur pas de souci puisqu'on peut faire des "sar 2". Mais en pascal, on n'est obligé de passer par des div.
De même pour les tableaux, j'ai rendu les calculs soit en dehors des crochets, soit en chageant le code et en faisant des additions.
Merci a tous
Albedo039
Messages postés18Date d'inscriptionmercredi 8 novembre 2006StatutMembreDernière intervention31 janvier 2008 25 juin 2007 à 17:16
je n'ai pas vérifié en détail... mais il y a bcp de calculs répetitifs qui doivent pouvoir se rationaliser.
ex. 1:
# nw:=((vagues[cp+wn-wi-1]+
# vagues[cp+wn-wi ]+
# vagues[cp+wn-wi+1]+
# vagues[cp+wn -1]+
# vagues[cp+wn +1]+
# vagues[cp+wn+wi-1]+
# vagues[cp+wn+wi ]+
# vagues[cp+wn+wi+1]) div 4)-vagues[sp+wn];
=> il y a 8 fois le calcul cp+wn ou encore il y a 3 fois les calculs "cp+wn+wi" et "cp+wn-wi"
En utilisant des vars supplementaires, on devrait gagner un peu, non?
ex. 2:
les indexages à "img" sont assez fréquents.
Il est peut-être possible d'améliorer la vitesse.
Considérant "result:=im[x+(he-y)*wi];" (ligne 105):
=> créer un tableau suppl. dans lequel on a précalculé les combinaisons possibles c.a.d.
for x:=0 to wi do for y:=0 to he do TabSuppl[x,y]:=x+(he-y)*wi;
et après on obtient
result:=im[TabSuppl[x,y]];
ce qui économise 2 additions et une multipl.
et
"im[i+(2*he-j-1)*wi]:=getpix(dx,dy);"
peut être traité de la même manière :)
ex.3:
je n'ai tjs pas vérifié ;) le code assembleur produit, mais je propose que toooouuus les "*2" et les "div 4" etc... soit remplacés par
"*2" => shl 1
"div 4" => shr 2
ça rame moins en effet !
Nais pour que ça aille encore plus vite, il faudrait penser à optimiser tes tableaux [0..0] car Delphi ralentit terriblement à calculer les index.
Exemple: cette ligne "im[i+(2*he-j-1)*wi]:=getpix(dx,dy);" prend un temps fou à elle seule !!!
C'est de ce côté là que tu peux gagner un max de vitesse...
John Dogget
Messages postés384Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention 7 mai 2009 25 juin 2007 à 15:57
J'ai l'impression que ça rame moins que la première version.
En tout cas, l'effet est bien reproduit, sans surcharge de codes :)
2 juil. 2007 à 11:28
@+
27 juin 2007 à 15:49
Non il y a deux beugs :
1)Si tu saisit 1 (chose que l'on peut faire) dans SEforce, tu as le droit a une bonne grosse exception pointant.
2) Si tu saisit 5000 : tu as une grosse trame noire au fond qui apparait (et elle est bien visible).
Je me souviens pas de la première version mais il me semble que ca ramait moins (car là ca rame un ptit peu beaucoup quand même). Je me trompe peut etre de raison mais je trouve cette version moins bleuffante que la première. : est ce pour ca j'en sais rien.
Par contre c'est drolement instructif comme code (puis c'est bien indenté ;)).
@+
26 juin 2007 à 14:10
Habe noch "eine" Bitte (um Zeilen 427-432):
5 Mal "rect(1,1,wi-2,he-2)"
kann man doch irgendwie aufmotzen, oder?
26 juin 2007 à 00:15
Juste un truc, pour les "shr 2" à la place des "div 4", c'était pas toujours possible puisqu'on travail avec des nombres signés. En assembleur pas de souci puisqu'on peut faire des "sar 2". Mais en pascal, on n'est obligé de passer par des div.
De même pour les tableaux, j'ai rendu les calculs soit en dehors des crochets, soit en chageant le code et en faisant des additions.
Merci a tous
25 juin 2007 à 17:16
ex. 1:
# nw:=((vagues[cp+wn-wi-1]+
# vagues[cp+wn-wi ]+
# vagues[cp+wn-wi+1]+
# vagues[cp+wn -1]+
# vagues[cp+wn +1]+
# vagues[cp+wn+wi-1]+
# vagues[cp+wn+wi ]+
# vagues[cp+wn+wi+1]) div 4)-vagues[sp+wn];
=> il y a 8 fois le calcul cp+wn ou encore il y a 3 fois les calculs "cp+wn+wi" et "cp+wn-wi"
En utilisant des vars supplementaires, on devrait gagner un peu, non?
ex. 2:
les indexages à "img" sont assez fréquents.
Il est peut-être possible d'améliorer la vitesse.
Considérant "result:=im[x+(he-y)*wi];" (ligne 105):
=> créer un tableau suppl. dans lequel on a précalculé les combinaisons possibles c.a.d.
for x:=0 to wi do for y:=0 to he do TabSuppl[x,y]:=x+(he-y)*wi;
et après on obtient
result:=im[TabSuppl[x,y]];
ce qui économise 2 additions et une multipl.
et
"im[i+(2*he-j-1)*wi]:=getpix(dx,dy);"
peut être traité de la même manière :)
ex.3:
je n'ai tjs pas vérifié ;) le code assembleur produit, mais je propose que toooouuus les "*2" et les "div 4" etc... soit remplacés par
"*2" => shl 1
"div 4" => shr 2
Sinon: moi j'aime bien les vagues :))
25 juin 2007 à 16:18
Nais pour que ça aille encore plus vite, il faudrait penser à optimiser tes tableaux [0..0] car Delphi ralentit terriblement à calculer les index.
Exemple: cette ligne "im[i+(2*he-j-1)*wi]:=getpix(dx,dy);" prend un temps fou à elle seule !!!
C'est de ce côté là que tu peux gagner un max de vitesse...
25 juin 2007 à 15:57
En tout cas, l'effet est bien reproduit, sans surcharge de codes :)
10/10