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. 

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, c’est à dire, que s’il 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°.
C’est sur cette derniere partie que je sèche, j’arrive à le faire avec la position 3 et 2, mais j’arrive 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]; } }