module inscription newsletter haut de page forum mobile

Rejeter la notice

ateliers live resolve avec forest

Ateliers Live Resolve - Formez-vous en ligne tous les mois avec Forest !
Faites rapidement évoluer la qualité de vos étalonnage avec nos ateliers mensuels de 3h.
Toutes les infos

Ateliers et Formations

Jeu sur les expressions

Discussion dans 'Adobe After Effects' créé par oscarus, 8 Mars 2004.

Tags:
  1. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    salut ,

    merci d avoir a nouveau plancher dessus :)
    alors qu est ce que j en pense ...

    d abord je peux peut etre essayer d expliquer brievement comment marche ton expression pour qu eventuellement ca serve a d autres.

    le solide peut se deplacer dans 4 directions lorsqu il se situe à l'intérieur du damier, dans 3 directions lorsqu il se situe sur les bordures et dans 2 directions lorsqu il se situe sur l'un des coins.

    l idee est donc de choisir un nombre aleatoire entier entre 1 et 4 ( 1,2,3 ou 4) determinant quelle direction est choisie et de deplacer le solide en consequence. Lorsque ce choix amène le solide a sortir du damier tu ajustes les valeurs de la position pour le faire rester dedans. La boucle t aide a calculer la position du solide au cours du temps, afin que chaque nouveau déplacement se fasse toujours a partir du point d arrivée du déplacement précédent.
    On pourrait d'ailleurs rajouter a la fin de la boucle for :
    Code:
    i+=10; 
    pour avoir un deplacement qui se produirait toutes les 10frames, (ce qui allège le temps d operation car un calcul toutes les 10frames).

    C'est tres bien ecrit, j apprends plein de choses, l'idee est simple, pleine de bon sens, mais c'est pas encore ça :non: .

    Tout d abord, le problème du déplacement linéaire n'est pas résolu, le solide saute toujours de case en case.
    Et puis quand on y regarde de plus près, on se rend compte que tes "ajustements" de position lorsque le solide est amené a sortir du damier, fausse le coté alétoire du déplacement. Certaines cases vont etre favorisées par rapport à d'autres (cf image si j arrive a joindre une image ;).


    Je reste ouvert à toutes propositions :D
     

    Fichiers attachés:

    • damier.gif
      damier.gif
      Taille de fichier:
      4.4 KB
      Nb. vues:
      422
  2. Sequelles

    Sequelles Modérateur
    Modérateur So

    Points Repaire:
    11 780
    Recos reçues:
    20
    Messages:
    4 261
    Appréciations:
    +2 / 13 / -0
    voici ma nouvelle proposition:
    Code:
    M=3//mouvement;
    F=2//fixe;
    
    P1=P2=position;i=0;
    G=thisLayer.width;H=thisLayer.height;D=thisComp.width-G;B=thisComp.height-H;
    while(i<timeToFrames()){seedRandom(i,1);R=random(12);P1=P2;
    if(G<=P2[0]&P2[0]<=D&H<=P2[1]&P2[1]<=B){x=Math.ceil(R/3);P2+=[((x==1)-(x==2))*G,((x==3)-(x==4))*H]
    }else{if(P2[0]<D&H<P2[1]&P2[1]<B){x=Math.ceil(R/4);P2+=[(x==1)*G,((x==2)-(x==3))*H]
    }else{if(P2[0]>G&H<P2[1]&P2[1]<B){x=Math.ceil(R/4);P2+=[(x==1)*-G,((x==2)-(x==3))*H]
    }else{if(G<P2[0]&P2[0]<D&P2[1]<H){x=Math.ceil(R/4);P2+=[((x==1)-(x==2))*G,(x==3)*H]
    }else{if(G<P2[0]&P2[0]<D&P2[1]>B){x=Math.ceil(R/4);P2+=[((x==1)-(x==2))*G,(x==3)*-H]
    }else{if(P2[0]<=G&P2[1]<=H){x=Math.ceil(R/6);P2+=[(x==1)*G,(x==2)*H]
    }else{if(P2[0]<=G&P2[1]>=B){x=Math.ceil(R/6);P2+=[(x==1)*G,(x==2)*-H]
    }else{if(P2[0]>=D&P2[1]<=H){x=Math.ceil(R/6);P2+=[(x==1)*-G,(x==2)*H]
    }else{if(P2[0]>=D&P2[1]>=B){x=Math.ceil(R/6);P2+=[(x==1)*-G,(x==2)*-H]
    }}}}}}}}}i+=M+F}
    linear(timeToFrames(),i-M,i,P1,P2)
     
    #452 Sequelles, 13 Août 2005
    Dernière édition: 27 Août 2005
  3. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    oh m.., je suis vraiment désolé Sequelles, je ne sais pas trop pourquoi, mais je n'avais pas vu ta dernière réponse, je la découvre à l'instant.
    j avais mis ca un peu de coté depuis une dizaine de jours car je ne trouvais pas.
    je fais joujou avec ton expression et je reviens te dire ce que j'en penses, mais ca sent déjà bien bon :)

    encore merci et pardon de te répondre si tardivement
     
  4. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    bon c'est cool ca marche :)

    donc si j'ai bien compris, tu divises ton damier en 3 parties distinctes comme on l'avait mentionné, "les coins", " l'interieur" et "les bordures", et pour chaque cas tu choisis une direction aléatoire ... apres tu récuperes les infos de position que tu utilises dans la methode ease pour effectuer le déplacement en continu.
    c'est ce que je cherchais à faire :bravo:

    juste deux petites questions :
    _pourquoi as tu mis "F=6; // fixe " alors qu'ensuite tu utilises "F/2" (derniere ligne de code). Puisque cette valeur détermine la durée pendant laquelle le solide reste en place, pourquoi ne pas mettre directement " F=3; // duree fixe" et utiliser F dans la deniere ligne.
    _je vois que dans tes "if", tu écris simplement un seul "&" pour dire "et", moi j'en écris toujours 2 (par ex, if( a>b && c>d), quelle est la difference s'il y en a une.

    encore bravo Sequelles, je vois qu'on peut toujours compter sur toi ;)
     
  5. oscarus

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    477
    Appréciations:
    +0 / 0 / -0
    Ma solution pour le piano :
     

    Fichiers attachés:

    • piano.zip
      piano.zip
      Taille de fichier:
      13.3 KB
      Nb. vues:
      235
  6. oscarus

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    477
    Appréciations:
    +0 / 0 / -0
    Pour le damier :
    Code:
    cadence=5;pause=3;
    t=0;c=thisLayer.width;A=B=position;
    X=thisComp.width;Y=thisComp.height;
    while(timeToFrames()>=t)
    {
    seedRandom(t,1)
    a=Math.floor(random(1,2.99));n=Math.floor(random(1,2.99));
    cn=Math.pow(-1,n);A=B;
    if(a==1){B=A+cn*[c,0]}
    else {B=A+cn*[0,c]}
    if(A[0]==c/2&a==1){B=A+[c,0]}
    if(A[0]==X-c/2&a==1){B=A-[c,0]}
    if(A[1]==c/2&a==2){B=A+[0,c]}
    if(A[1]==Y-c/2&a==2){B=A-[0,c]}
    t+=cadence+pause;
    }
    ease(timeToFrames(),t-cadence, t, A,B);
    
     
  7. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    salut Oscarus :) ,

    je suis content que tu sois revenu dans la place, j'admire le travail que tu fais (le travail sur les expressions j'veux dire).

    je découvre ton expression "damier" au ptit déj (je suis au Quebec ;) ), et je la trouve, comment dire, nickel chrome :D.

    plus concise que celle de Sequelles et pourtant tous les cas de figure sont considérés.

    tu definis un déplacement de base, a savoir gauche-droite, haut-bas (aleatoirement) et tu ajoutes 4 conditions aux bords pour les coins.
    l utilisation du coefficient "(-1)puissance n " est tres rusée, je tacherai de m'en souvenir.

    Oscarus, chapeau bas :jap:
     
  8. oscarus

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    477
    Appréciations:
    +0 / 0 / -0
    Je te félicite aussi pour tes progrès.
    Bonne continuation.
     
  9. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    merci t'es sympa de m'encourager :)

    je suis en train de regarder le projet piano...
    j ai pigé pour la position de la note : tu as dvivisé ton piano en deux, et tu choisis aléatoirement une position (correspondant a l'emplacement d'une note), dès lors que le niveau du son dépasse un certain seuil par rapport à l'instant précédent
    par contre pour l opacité, je ne saisis pas bien un truc :
    c'est la fonction "clamp". La doc me dit :
    Code:
    Nombre ou Ensemble Clamp(value, limit1, limit2): Limite chaque élément
    entre les valeurs limit1 et limit2.
    ok je comprends que cela me retourne une valeur bornée par limit1 et limit2, donc une valeur toujours comprise entre ces 2 bornes, mais comment est elle déterminée ?

    pouurais tu me donner un petit exemple qui me permette de saisir son fonctionnement ..

    pour le reste je crois avoir compris, et franchement j'étais loin de me douter qu'on pouvait construire un piano avec le laboratoire de particule, tu me sidère :D
     
  10. oscarus

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    477
    Appréciations:
    +0 / 0 / -0
    Son fonctionnement est simple :

    Si L1 < X < L2 alors clamp(X,L1,L2) = X
    Si X <= L1 alors clamp(X,L1,L2) = L1
    Si X >= L2 alors clamp(X,L1,L2) = L2
     
  11. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    ah ok d'accord, merci ;)

    Adobe aurait du t'embaucher pour écrire sa doc :lol:
     
  12. Sequelles

    Sequelles Modérateur
    Modérateur So

    Points Repaire:
    11 780
    Recos reçues:
    20
    Messages:
    4 261
    Appréciations:
    +2 / 13 / -0
    Damier

    Pour faire un tirage au sort entre 1 et -1 on peut faire ça aussi
    Code:
    Math.pow(-1,Math.round(random()))
    Pas mal celle là non?

    Sinon je crois bien que la valeur sup du random est une limite qui n'est pas inclus dans l'ensemble. donc on peux utiliser random(1,3) directement au lieu de random(1,2.99)

    Mais je ne comprend pas bien les conditions au bords. Est ce qu'on retrouve le problème soulevé précédement?
     

    Fichiers attachés:

  13. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    oui effectivement (j avais parlé un peu vite),

    on retrouve le meme probleme avec l expression d'Oscarus.
    puisque "a=1" nous donne un deplacement en X et "a=2" en Y.
    donc lorsque le solide arrive sur une case de bordure (en prenant l'exemple de la photo, i.e. bordure gauche du damier), deux choix s'offrent a lui : 50% de chance de se deplacer en X, 50% de chance en Y, suivat la valuer de "a". Et parmi c est 50% de chance en Y, deux choix s'offrent a nouveau a lui: 50% de chance en haut, 50% en bas.
    Donc au finish, ca fait 50% de chance qu'il se deplace en en X, et 25% de chance pour chacun des deplacements en Y.

    Bien entendu, pour un déplacement parfaitement aléatoire, il nous faut une probabilité de 1/3 sur chacunes des 3 cases qui entourent le solide dans ce cas là.

    Je crois qu'il va etre difficile de ne pas énumérer les 9 cas possibles (comme dans ton expression Sequelles), a savoir :
    4 cas pour les coins, 4 cas pour les bordures, 1 cas pour une case intérieure.

    Donc Sequelles +1 :D
     
  14. oscarus

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    477
    Appréciations:
    +0 / 0 / -0
    Re: Damier

    C'est assez difficile à vérifier, mais au vu des possibilités du résultat il est vrai que le risque est infiniment petit. On peut donc effectivement se permettre de remplacer random(1,2.99) par random(1,3).

    Désolé les gars, je n'avais fait que survoler vos remarques. Voici ma deuxième proposition pour le damier :
    Code:
    cadence=5;pause=3;
    t=0;c=thisLayer.width;A=B=position;X=thisComp.width;Y=thisComp.height;
    while(timeToFrames()>=t)
    {
    seedRandom(t,1)
    a=Math.round(random());b=Math.floor(random(1,4));n=Math.round(random());
    cn=Math.pow(-1,n);A=B;
    if(a==0){B=A+cn*[c,0]}if(a==1){B=A+cn*[0,c]}
    if(A[0]==c/2){if(b==1){B=A+[c,0]}else {B=A+cn*[0,c]}}
    if(A[0]==X-c/2){if(b==1){B=A-[c,0]}else {B=A+cn*[0,c]}}
    if(A[1]==c/2){if(b==1){B=A+[0,c]}else {B=A+cn*[c,0]}}
    if(A[1]==Y-c/2){if(b==1){B=A-[0,c]}else {B=A+cn*[c,0]}}
    if(A[0]==c/2&A[1]==c/2){if(a==0){B=A+[c,0]}else {B=A+[0,c]}}
    if(A[0]==X-c/2&A[1]==c/2){if(a==0){B=A-[c,0]}else {B=A+[0,c]}}
    if(A[0]==c/2&A[1]==Y-c/2){if(a==0){B=A+[c,0]}else {B=A-[0,c]}}
    if(A[0]==X-c/2&A[1]==Y-c/2){if(a==0){B=A-[c,0]}else {B=A-[0,c]}}
    t+=cadence+pause;
    }
    ease(timeToFrames(),t-cadence, t, A,B);
     
    #464 oscarus, 27 Août 2005
    Dernière édition: 27 Août 2005
  15. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    mais enfin qu'est ce que c'est que cette attitude Oscarus :D

    pour l'expression, on est d accord, il y a les 9 cas, avec l'equiprobabilité des déplacements amené par le "b" qui peut prendre pour valeur 1, 2 ou 3.

    merci a vous deux et bravo, je ne pensais pas au debut que le projet damier allait faire couler autant d'encre, mais c'etait loin d'etre trivial.

    on peut passer a autre chose, un nouveau jeu ? ;)
     
Chargement...

Dernières occasions

 

Partager cette page