module inscription newsletter haut de page forum mobile

Rejeter la notice

formations etalonnage sur davinci resolve

Nos Formations Etalonnage avec Forest reviennent en octobre !
Adoptez une réelle méthodologie d'étalonnage professionnelle et atteignez vos objectifs créatifs avec nos formations intensives sur 3 jours
Toutes les infos
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
Rejeter la notice

Formation Lumière - Pratique Intensive du 14 au 16 octobre à Paris
Formez-vous avec cet atelier de pratique intensive dans des conditions exceptionnelles ! Formation finançable.
Toutes les infos

Ateliers et Formations

[CommentFaire?] expression : un calque enfermé dans un cercle

Discussion dans 'Adobe After Effects' créé par aymeric13, 24 Juillet 2013.

  1. aymeric13

    Points Repaire:
    100
    Recos reçues:
    0
    Messages:
    6
    Appréciations:
    +0 / 0 / -0
    Bonjour à tous !

    Cela fait un moment que je me penche sur le problème sans arriver à trouver de réelles solution, pas même sur les différentes références en matière d'expressions (nabscripts etc)
    Afin que tout le monde comprenne bien l'intention : il s'agit d'un calque ne pouvant pas aller plus loin que l'aire d'un cercle, et non le périmètre, de la même manière qu'on peut "enfermer" un calque dans une boite avec l'expression "clamp" ou en combinant "Math.min" et Math.max".
    Le calque enfermé doit donc toujours pouvoir bouger, mais ne jamais sortir du cercle.

    Je m'étais penché vers la solution des sin et cos avec un rayon et un angle contrôlé par des glissières... Mais cela nous force à bouger le calque avec les glissières, ce qui n'est pas pratique.

    Avez vous une solution à ce problème ? =)
     
  2. beginUndoGroup

    Points Repaire:
    3 170
    Recos reçues:
    6
    Messages:
    142
    Appréciations:
    +4 / 2 / -0
    Tu peux en dire plus sur la manière dont tu bouges ton calques ?
    Il y a un million de manières de cantonner un point à l'intérieur d'un disque et parmi toutes ces manières il y en a probablement pas beaucoup qui te satisferaient.
    En voici une très simple, ça te fera déjà un point de départ (j'ai mis un effet cercle pour visualiser le cercle; remplace C = (mon expression) par C = (le centre de ton cercle), pareil pour le rayon. Ensuite il faut adapter le rayon pour tenir compte des dimensions de ton calque. L'expression doit aussi être adaptée si le point d'ancrage de ton calque n'est pas au centre de ton calque.)

    Code:
    C = thisComp.layer("BG").effect("Circle")("Center");
    R = thisComp.layer("BG").effect("Circle")("Radius");
    P = position; 
    u = P-C;
    d2 = length(u);
    C + u/d2*Math.min(R,d2);
    Note: pour visualiser la trajectoire de ton calque avant et après expression tu peux cliquer sur le bouton "graphique" juste à côté du bouton "=" qui active/désactive l'expression.
     
  3. aymeric13

    Points Repaire:
    100
    Recos reçues:
    0
    Messages:
    6
    Appréciations:
    +0 / 0 / -0
    ...
    ça marche !
    Je peux bouger mon calque à la main comme je veux, il ne va pas plus loin que le cercle. Vraiment bravo ! Je n'en reviens pas que ça soit si simple... Peux tu m'expliquer un peu ? =) (je n'aime pas ne pas comprendre ce que je fais)
    C est le centre de mon cercle et R son rayon (que j'ai mis sur une glissière). P, ça parle de lui même, mais la suite commence à être un peu floue...
    u et d2 sont donc les variables qui me permettront après de bouger mon calque librement à l'intérieur du cercle c'est bien ça ? En fait c'est le "u" et son utilisation dans length dont je ne comprends pas bien la subtilité...
    Peux tu m'éclairer ? =)
     
  4. beginUndoGroup

    Points Repaire:
    3 170
    Recos reçues:
    6
    Messages:
    142
    Appréciations:
    +4 / 2 / -0
    Tu fais bien de me demander, je me rends compte que l'expression retournera une erreur si la position coïncide avec le centre du cercle. Tu devrais remplacer la dernière ligne par
    Code:
    (d2 == 0) ? C : C + u/d2*Math.min(R,d2);
    1. u c'est la position relative du calque par rapport au centre du cercle (mathématiquement: un vecteur),
    2. d2 c'est la longueur de u, c'est-à-dire la distance entre C et P,
    3. u/d2*Math.min(d2,R) est un vecteur de même direction que u, mais de longueur au plus R
     
  5. aymeric13

    Points Repaire:
    100
    Recos reçues:
    0
    Messages:
    6
    Appréciations:
    +0 / 0 / -0
    Et bien figure toi que non pour l'erreur. J'y avais pensé en voyant le signe de division. J'ai retiré l'expression après l'avoir copié. J'ai aligné le calque sur la position du premier (au centre donc), puis j'ai recollé l'expression et... aucune erreur.
    J'ai revérifié en collant une glissière qui était égale à la distance entre les deux calques : lorsque les deux calques sont alignés, la distance est bien égale à zéro.
    Un mystère complet...
     
Chargement...

Partager cette page

Dernières Occasions

 
Vous souhaitez annoncer sur le Repaire ? Contactez-nous