Baptiste12
Touillette
Messages : 10
Enregistré le : 09 Avr 2017, 21:09

Comparer 10 variables

13 Fév 2018, 10:55

Bonjour, ma question peut paraître bête mais je ne trouve pas comment je peux comparer les valeur de 10 variables de façon "automatique" ( c'est-à-dire sans devoir toutes les comparer entre elles...).

Plus précisément et en application :

a = 2;
b = 1/5;
c = 8;
d = a*2;
e = 7.86;
[....]

Je veux maintenant qu'une variable "XMIN" soit égale à la valeur la plus petite proposée. :)
Auriez-vous une formule magique ? Merci à tous.
0

Nicolas DAVID
Touillette
Messages : 6
Enregistré le : 09 Juin 2017, 15:48
Localisation : Nantes
Contact : Site Internet

Re: Comparer 10 variables

13 Fév 2018, 11:26

Déclarer les variables puis utiliser la fonction Math.min dans les champs d'expression de la propriété :
a = 2;
b = 1/5;
c = 8;
d = a*2;
e = 7.86;
Math.min(a, b, c, d, e);

Cela va renvoyer la plus petite valeur de ta matrice, ici 0,2 (qui est égal à 1/5).

Espérant que cela a pu aider.


Nicolas.
1

Baptiste12
Touillette
Messages : 10
Enregistré le : 09 Avr 2017, 21:09

Re: Comparer 10 variables

13 Fév 2018, 11:38

Euh je me sens un peu bête de ne pas avoir trouvé tout seul...ça me semble facile maintenant...
Merci à toi !
0

Baptiste12
Touillette
Messages : 10
Enregistré le : 09 Avr 2017, 21:09

Re: Comparer 10 variables

13 Fév 2018, 12:10

J'ai une seconde question :

Actuellement, j'ai un calque CIBLE et une dizaine de calques qui s'appellent "SUIVEUR01", "SUIVEUR02", "SUIVEUR03", ...
Je souhaiterais connaitre la distance la plus petite entre la cible et un suiveur.
Je vais donc créer une variable pour chaque distance entre chaque SUIVEUR et CIBLE avec la syntaxe suivante : length (pos SUIVEUR[XX], pos CIBLE) et les comparer ensuite avec Math.min
Mais si demain, je rajoute 8 calques "SUIVEUR" supplémentaires, comment je peux automatiser ça sans créer d'autres variables et devoir les ajouter ensuite à ma fonction Math.min

N'y a t-il pas une fonction capable de rechercher des calques par leurs noms (tous les "SUIVEUR"), d'ensuite en extraire leur position et la distance avec le calque "CIBLE" pour enfin les comparer et ressortir la plus petite d'entre-elles ?
0

Nicolas DAVID
Touillette
Messages : 6
Enregistré le : 09 Juin 2017, 15:48
Localisation : Nantes
Contact : Site Internet

Re: Comparer 10 variables

13 Fév 2018, 13:00

Sans doute que oui mais dans ce cas s'adresser directement à Dan Ebberts ;-)

Nicolas.
0

Baptiste12
Touillette
Messages : 10
Enregistré le : 09 Avr 2017, 21:09

Re: Comparer 10 variables

13 Fév 2018, 13:35

Il doit bien y avoir quelqu'un ici qui sache comment faire ;)
J'en appelle à votre bon cœur ! :)
0

Avatar de l’utilisateur
kana
Modérateur
Messages : 514
Enregistré le : 25 Nov 2015, 12:40

Re: Comparer 10 variables

13 Fév 2018, 15:59

Je pense qu'il faut passer par une boucle pour tester le nom de tes layers, et à l'aide d'un split par exemple, tu regardes si le layer s'appelle Suiveur, et si oui alors tu extrais la position.

Par exemple tu appelles tes layer Suiveur#01, tu fais un name.split("#")[0] -> et tu testes s'il s'appelle bien suiveur, si oui, tu récupères sa position.

Bon pour ça il faut maitriser un peu les boucles, mais ça doit pas être bien compliqué.
0

Baptiste12
Touillette
Messages : 10
Enregistré le : 09 Avr 2017, 21:09

Re: Comparer 10 variables

13 Fév 2018, 16:05

Merci pour votre aide.
Pour information, j'ai contacté Dan Ebberts qui m'a envoyé ça :

Code : Tout sélectionner

myMin = 999999999;
p = thisComp.layer("CIBLE").position;
for (i = 1; i <= thisComp.numLayers; i++){
  if(thisComp.layer(i).name.indexOf("SUIVEUR") > -1){
    myMin = Math.min(myMin,length(thisComp.layer(i).position,p));
  }
}
myMin


Il va falloir maintenant que je me documente pour pouvoir comprendre ce code car il marche à la perfection !
Merci à vous !
0

Avatar de l’utilisateur
kana
Modérateur
Messages : 514
Enregistré le : 25 Nov 2015, 12:40

Re: Comparer 10 variables

13 Fév 2018, 16:22

bah en gros c'est plus ou moins ce que je t'expliquais, sauf qu'il fait pas de split du coup (et que dan est trop fort donc il t'a écris l'expression !!)
-> mais t'as fait comment pour le contacter ? Je savais pas qu'il répondait ^^

En gros il fait une boucle du coup, où il teste tous tes layers.
pour if(thisComp.layer(i).name.indexOf("SUIVEUR") > -1)
thisComp.layer(i).name.indexOf("SUIVEUR") retourne 0 si ton layer commence par "suiveur" (=0 ça veut dire qu'il est en 1ere position)

Du coup s'il commence par suiveur, c'est égal à 0, s'il contient le mot suiveur il sera supérieur à 0
Donc s'il contient le mot suiveur, ce sera superieur à -1,

exemple d'indexOf

Ensuite il calcule la distance avec le length, puis le compare à la précédente valeur de mymin, pour garder seulement la valeur mini
0

Retourner vers « Scripts & Expressions »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité