DÉGRADÉ ANINÉ ! RECTANGULAIRE, POLAIRE, OU LINÉAIRE. MULTI SPEED, ET PLUS FLUIDE

cs_koko Messages postés 654 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 20 février 2005 - 20 févr. 2005 à 10:37
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 19 avril 2006 à 21:10
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/29652-degrade-anine-rectangulaire-polaire-ou-lineaire-multi-speed-et-plus-fluide

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
19 avril 2006 à 21:10
Ah ? vl'a qu'il cherche toutes les sources de stepibou pour se rattraper ^^
kegi Messages postés 164 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 25 août 2008
19 avril 2006 à 21:05
Très bien. 9/10

Cordialement,
Kevin (kegi@hotmail.com)
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
23 mars 2005 à 09:45
N'hésitez pas à essayer d'accélérez un peu le timer, dans la fonction javascript :

function wait(temprestant,act){
...
setTimeout(act, 10); //par exemple
}
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
21 mars 2005 à 18:11
Après l'avoir testé, je confirme qu'en créant les images dans des fichiers png ce script gagne beaucoup de fluidité, même avec des grandes dimensions !
Stepibou, je t'envoie ce que j'ai fait.
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
22 févr. 2005 à 16:56
Salut,
Bien trouvé le dégradé en polaire et l'animation.

Attention, il n'y a pas de 's' dans getElementById('texte1'). En effet, il n'y a qu'un seul élément pour un seul id ;o)

Sinon dans les fonctions js de index.php, je n'ai pas compris pourquoi tu as mis des '[0]' derrière les 'oSelects' ? Chez moi il faut que je les enlève pour que ça fonctionne.

Pour gagner en fluidité, peut-être que tu peux essayer de créer toutes les images qui vont servir pour un dégradé animé, par exemple en png, et ensuite tu les appelles en js. Ainsi tu évites de re-créer les mêmes images à chaque passage de la boucle. C'est juste une idée comme ça ;o)

A+
Arnaud
stepibou Messages postés 112 Date d'inscription jeudi 11 mars 2004 Statut Membre Dernière intervention 11 octobre 2006
22 févr. 2005 à 16:03
C'est cool les gars.
merci coucou747 pour ton aide :
je n'ai pas les ouvertures fermetures de tags php ?!?
j'ai le report d'erreur pourtant sur on, d'ou ca viens?

Pour zoukozouko, ca ne peux pas etre lent :
c plus ou moins fluide, ou carement ca n'affiche pas
si c'est trop relou.

Pour Konqueror et tout le tintoin, je l'avoue, j'y connait rien, tout le js qui y a ici, a ete adapté à l'arache d'autres sources. désolé, demerdez vous!...

mais pour me faire pardonner, les ptits lou, je vous
prépare un petit truc sympas, et qui à priori ne sera pas
une locomotive à vapeur. ;-)}
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
22 févr. 2005 à 01:39
c'est que la diférence ne doit pas etre vraiment notable...
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
22 févr. 2005 à 00:55
"En tout cas, c'est sûr que c'est plus clair comme tu l'as codé (mais moins efficace je crois, à vérifier)."

J'ai déjà fait des tests il y a longtemps sur 10000 itérations, verdict : temps de génération identique.

a +
zoukozouko Messages postés 148 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 21 janvier 2009
22 févr. 2005 à 00:54
OK, merci.
c'est vrai que sur 1000000 d'opération à la seconde, le test de la présence d'une accolade ne ralenti pas beaucoup, mais forcément, le fait de rajouter des accolades inutiles oblige à empiler, dépiler, et à faire un test en plus s'il ne rentre pas dans le if (pour savoir à quel moment il doit passer en séquence).
tu devrais essayer avec une plus lonugue séquence de code.
Le pb de ton test c'est qu'il n'y a pas de séquence après le if
essaie un code du type :

{
$k = 0;
for ($i=0; $i<100; $i++)
{
if ($i%10)
{
if ($i%2) {$k++;}
else {$k += 2;}
}
else
{
if ($i%2) {$k++;}
else {$k += 2;}
}
if ($i%3) {$k++;}
else {$k += 3;}
$k--;

}
contre:
{
$k = 0;
for ($i=0; $i<100; $i++)
{
if ($i%10)
if ($i%2) $k++;
else $k += 2;
else
if ($i%2) $k++;
else $k += 2;

if ($i%3) $k++;
else $k += 3;
$k--;
}

Je ne mets jamais d'accolade s'il n'y a qu'une instruction apres le if, et ceci pour des raisons de clarté(j'arrive d'autant mieu à lire un code qu'il y a peu d'accolades...
Et puis dès que je vois une acolade, je cherche la deuxième instruction...
Bon toutes facons, c'est sûrement une habitude personnelle.
Je posait la question surtout pour me rassurer au niveau du temps d'exécution.

coucou747 : tu n'as pas fait de test pour le swith avec un seul case, comparé au if, tu en penses quoi?
zoukozouko Messages postés 148 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 21 janvier 2009
22 févr. 2005 à 00:27
aussi, j'ai essayé de tout tester,j'ai peut etre oublié qqchose, mais je n'ai pas remarqué de probleme de temps d'execution.
en tout cas pour les images 320 x 240 (par défault), limage est affichée en moin d'une seconde (vu les comentaires je m'attendait à bien pire)
quelqu'un peut-il me dire dans quel cas l'exécution est lente?
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
22 févr. 2005 à 00:25
euh...
tout dépends de ce que tu apelles se tromper...

ça surcharge effectivement la pile (teste sur une calto en basic un truc style :
:lbl0
:getkey->a
:if a=0:then:goto 0:end
:goto 0


si tu n'apuis pas sur une touche, en peu de temps tu vas voir erreur memory... car la pile aura été remplie...

pour les acolades, ça ne joue pas un grand role, c'est pas un problème grave, mais l'utilisation des gotos dans nimporte quel langage est vivement déconseillée pour cette raison...

Maintenant, faudrait que j'éteigne mon serveur X, mon serveur apache, mysql ... et que je fasse des benchs... la, c'est vraiment mitigé... les résultats sont vraiment trops proches ou alors s'ingversent tout le temps... je ne peux rien conclure, maic c'est vrai que pour la théorie, tu as raison... maintenant, c'est tellement petit comme optimisation... celle la, moi je ne la fais pas toujours pour laisser plus de claretée...

<?php
function compare($tab,$calc)
{
$temps=array();
$j=0;
echo 'code:, temps d\'exécution pour '.$calc.' calculs, ';
foreach($tab as $code){
$start=microtime();
eval('for ($i=0;$i<10000;$i++)'.$code);
$end=microtime();
echo '----
'.$code.', '.($end-$start).', ';
$j++;
}
echo '
';
}
compare(array('if ($a){$a++;}else{$a=1;}','if ($a)$a++;else $a=1;'),100000);

?>


chez moi, rien de concluant...
zoukozouko Messages postés 148 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 21 janvier 2009
22 févr. 2005 à 00:12
Je trouve la source tres interessante est bien commentée.
J'ai deux questions :
une au niveau de la prog : pourquoi mets-tu des accolades après tes if même s'il n'y a qu'une intruction?
(prévenez moi si je me trompe) mais il me semble que le php n'étant pas compilé, l'utilisation des accolades surcharge la pile d'execution : au lieu de continuer l'exécution du code après le if, (avec ton dode, ) il faut vérifier qu'il n'y a plus d'instructions et qu'on a bien une accolade fermante. En tout cas, c'est sûr que c'est plus clair comme tu l'as codé (mais moins efficace je crois, à vérifier).
2ème question: rectangle.php :
switch ($sens)
{
case $cas :
if ( $i < $j*$t/8 ) {
$k = -$i+$j*$t/8;
} else {
$k = $i-$j*$t/8;
} break;
}
pourquoi tu choissis un switch plutôt qu'un

if ($sens == $cas)
if ( $i < $j*$t/8 ) $k = -$i+$j*$t/8;
else $k = $i-$j*$t/8;

le pb a déja été posé par anthomicro je crois.

enfin, une question pour dominion :
"tu trace en software et c'est ça qui est lent ": j'ai pas tres bien compris ce que tu veux dire par la, peux-tu m'expliquer (si c'est lent en software, ca voudrait dire que ca l'est moins en hardware, une palette graphique par exemple... je vois pas trop ce que tu entends par la. merci)

Merci
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
21 févr. 2005 à 22:12
Salut
la synthaxe exacte est :
document.getElementById('iddumachin')....=

ça remplace les document.all de MSIE
ou les iddumachin.... de IE

ou les documentbyname sauf que la faut que tu remplace les atributs name par des atributs ID

enfin voila, c'est plus W3C...

enfin, on peut pas t'en vouloir pour ça, t'as prévu qqch pour netscape, mais malheureusement, c'est plus utilisé (comparé à Mozilla...)

faut tester la présence de caractères gecko ou khtml pour Konqueror et Mozilla...

sinon, pour ton code php en lui meme, j'ai pas tout regardé, dans l'ensemble ça a l'air pas trop mal, sauf quelques choses plutot désagréables à lire comme :
index.php ligne 94, 97, 105, 109, 115, et 118
if ( $couleur2 == "" ) {
qui aurait du etre remplacé par if (!$couleur){
qui est bien plus compréhensible, et plus rapide à exécuter...



ceci n'eszt pas compatible... (ou ne l'était pas...)
mieux vaut mettre ça en CSS

sinon, tu as exactement 15 ouvertures fermetures de tags php, je ne trouves personellement pas ça super super....
mais tu fais ce que tu veux à ce niveau la....

sinon, t'as pow pour les puissances... (polaire.php l 13)

enfin ça reste pas mal
cs_koko Messages postés 654 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 20 février 2005
20 févr. 2005 à 13:19
firefox et konqueror.
En fait, tu as codé pour IE qui est tres laxiste par rapport aux autres browsers.
ca doit venir d'une utilisation différente de getelementbyid ou des choses comme ca.
Je n'ai malheureusement pas le temps de me pencher plus dedans.
stepibou Messages postés 112 Date d'inscription jeudi 11 mars 2004 Statut Membre Dernière intervention 11 octobre 2006
20 févr. 2005 à 13:01
hello,
je viens d'essayer sur opera, et c beaucoup plus fluide,
que ie 6.
l'utilsition du cpu est aussi plus faible.

dominion : je comprend ce que tu veux dire,
mais c bien la generation de l'image en php qui est la plus longue.
si tu t'y connais en js, a tu un player plus court,
plus performant, et compatible avec tous les navigateurs.

anthomicro : il faut utiliser opera ou autre , ou diminuer la taille de l'image.
si l'ordi n'as pas eu le temps de calculer l'image, il ne l'affiche pas.
merci pour ton analyse.

koko : quel est le navigateur ou ca marche pas?
je m'y connais pas trop en js si quelqu'un sait ?

bon a+, bonne prog. ;-)
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
20 févr. 2005 à 12:41
L'image n'est absolument pas réalisée en javascript... Regarde bien...

Par contre j'ai voulu tester le script, j'ai plein d'erreurs, l'image n'est pas générée (j'ai le texte alternatif à la place).

a +
cs_dominion Messages postés 230 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 15 mai 2008
20 févr. 2005 à 12:32
Ben le php est server side, donc pour animer faut autre chose. Ici c'est du JS. Le problème avec ça c'est que c'est interprêté par le navigateur en boucle (déjà fort long) et tracé en software pur ! La génération d'image peut être très rapide en php, son affichage s'il veut etre fluide sera une usine à gaz !
Le mieux est de trouver un autre language pour ça (flash par exemple) ou dans le cas où ça s'y prêterais, écrire une classe d'écriture gif qui sauverait les images dedans te les afficherait, et on aurait donc une fluidité gif !
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
20 févr. 2005 à 12:02
C'est tracé en JS ça ? je vois plutôt du code PHP ?!
cs_dominion Messages postés 230 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 15 mai 2008
20 févr. 2005 à 11:59
Personellement, je pense que c'est ton js qui est lent. Je n'en suis pas sûr vu que je n'ai pas exécuté, mais j'ai eu le même problème que toi avec du texte qui défile : ça va très vite bouffer le cpu...
Je ne pense pas qu'il y ai une vraie solution : tu trace en software et c'est ça qui est lent ! Le mieux serais d'essayer en flash...

To be continued ;-) Tiens-nous au courant.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
20 févr. 2005 à 11:33
Salut,

tu peux remplacer tes switchs par des if() et tes for() par des while(), bon tu gagneras pas grand chose evidemment...

a ++
cs_koko Messages postés 654 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 20 février 2005
20 févr. 2005 à 10:37
Le code javascript est un peu capricieux... une compatibilité avec tout les navigateurs ca serait chouette !

A cause de ce code js, je n'ai pas pu tout tester et ne peut donc pas dire les bons points des mauvais.
Rejoignez-nous