Aller au contenu


Photo
- - - - -

Décaler un événement de 200ms. Pourquoi je ne peux en décaler plusieurs?

Processing

Aucune réponse à ce sujet

#1 bvking

bvking

    Membre occasionnel

  • Membres
  • Pip
  • 98 messages

Posté 05 mars 2022 - 10:08

Bonjour à tous!

 

Pour mon installation artistique, j’aimerai à partir du mouvement d’un point tournant à vitesse constante, pouvoir faire que 9 autres points suivent le premier avec des decalages temporels et spatiaux.
Voici le lien pour voir des exemples d'utilisations avec des différents décalages temporels et spatiaux. https://youtu.be/IJ1tZstcywA
Dans la video, je commence à changer le temps en millisecondes et la phase de décalage. Mais le problème c'est que tous les points suivants se décalent instantanément, sans attendre les 2XX millisecondes.  :help:
 
Pour commencer, il faut pouvoir faire en sorte qu’un point appelé 3 se deplaçant de maniere circulaire, soit suivi par un autre point appelé 2 se deplacant aussi  de maniere de circulaire. Le point 2 à une vitesse circulaire constante
A la base le point 3 n’a pas de vitesse et il est à la position 0
 
J'arrive à gerer un décalage de phase entre 3 et 2 de deux manières.
une temporelle: 
 
De telle sorte que 3 ait la phase 2 avec un temps de décalage nul ou de 200 ms par exemple. 
Dans le premier cas, 3 et 2 ont exactement la meme position
Dans le second on observe une latence.
 
une spatiale:
 
De telle sorte que 3 ait la phase 2 avec une position de décalage, cest à dire, que sil y a un ecart entre la position 2 en mouvement et la position 3 à l’arrêt, la position 3 avance par à-coups, dès que la difference entre la position 3 et 2 est supérieure à 45° par exemple. 
 
Puis essayer de voir si on peut combiner les deux : 
 
Faire en sorte que la position 3 avance de 45° apres 200 ms à compter du moment où la difference entre la position 2 et 3 a été supérieure à 45°.
 
Cest sur cette derniere partie que je sèche, jarrive à le faire avec la position 3 et 2, mais jarrive pas à généraliser avec les positions suivantes. La 4 devrait suivre la 3 avec une retard de 200 ms et un ecart de 45° et ainsi de suite pour les positions i+1 et i. 
Espérant avoir été clair, je mets la fonction ci dessous, si vous avez des idées.
Merci pour vos efforts!   ;)
 
 
 
void formerKeyo() {
 if (circularMov==true ){   
if (d>=0){
    decay=d; // decay in millis (50,.. 1000 ms),  before changing phase i+1 with the phase from i
}   
   if (k>=0){
      phiShift=k*-PI/16; // here the position to add or substrat to the next point (i+1)
      mapShiftCircular= map (phiShift, 0, 16*-PI/16, 0, 6400);   // one revolution is 6400 step 
  //  mapShiftCircular is the space to reach in order to follow the previous point 
}
   formerEvent[2]=millis();   // time from the beginning of the launch of the program.
}

  for (int i = 2; i < (3); i++) {
      
       if ( circularMov==true  && // mapShiftCircular is the space between two points
   //points goes in clock wise
    ((CircularOldVirtualPosition[2] <= CircularVirtualPosition[2+1]+mapShiftCircular) && (CircularVirtualPosition[2] >= CircularVirtualPosition[2+1]+mapShiftCircular) &&
     (CircularOldVirtualPosition[2]+800*0.1 < CircularVirtualPosition[2]+800*0.1))
   
    ||
    ((CircularOldVirtualPosition[2]+mapShiftCircular >= CircularVirtualPosition[2+1]) && (CircularVirtualPosition[2]<= CircularVirtualPosition[2+1]+mapShiftCircular) &&
     (CircularOldVirtualPosition[2]+800*0.1 > CircularVirtualPosition[2]+800*0.1))
  //points goes in counter clock wise
    )
  
     { 
         twoTree = true;
  }
     else twoTree= false;  
   if  (//formerEvent[2]%250>200
     formerEvent[2]>formerEvent[3]+decay && twoTree== false // twoTree== true do not trig the program below
       ){
          net.phase[3]=(net.phase[2])-phiShift*1;//
          net.phase[3]= net.phase[3]%TWO_PI;//   
         memoryi=i;  
         formerEvent[3]=formerEvent[2];
       // noLoop();
          }        
   }

 for (int j = 3; j < (11); j++) {
      
       if ( circularMov==true  &&
   
    ((CircularOldVirtualPosition[j] <= CircularVirtualPosition[j+1]+mapShiftCircular) && (CircularVirtualPosition[j] >= CircularVirtualPosition[j+1]+mapShiftCircular) &&
     (CircularOldVirtualPosition[j]+800*0.1 < CircularVirtualPosition[j]+800*0.1))
   
    ||
    
    ((CircularOldVirtualPosition[j]+mapShiftCircular >= CircularVirtualPosition[j+1]) && (CircularVirtualPosition[j]<= CircularVirtualPosition[j+1]+mapShiftCircular) &&
     (CircularOldVirtualPosition[j]+800*0.1 > CircularVirtualPosition[j]+800*0.1))
  
    )
  
     { 
         followNumber[j]= true;
         formerEvent[j+0]=formerEvent[2];
  }
         else followNumber[j]= false;
     
   if  (
 //  formerEvent[2]>formerEvent[j+1]+decay && followNumber[j]==false
     formerEvent[j+0]>formerEvent[j+1]+decay && followNumber[j]==false
   ){
   
         print ("net.phase ") ;  print (j); print (" ") ; print (net.phase[j+0]) ; //  println();
         print ("net.phase ") ;  print (j+1); print (" ") ; println (net.phase[j+1]) ; //  println();
         net.phase[j]=net.phase[j]%TWO_PI;
          net.phase[j+1]=(net.phase[j])-phiShift;// 
          net.phase[j+1]= net.phase[j+1]%TWO_PI;//  keep phase between 0 and TWO_PI
    
        memoryi=j;  
        formerEvent[j+1]=formerEvent[2];  
        }       
   }
 
 

 





Répondre à ce sujet



  



0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users