var ball = thisLayer;var cup = thisComp.layer("Cup");var captureDuration = .25; //time for ball to reach center of cup once capture beingsvar captureRadius = 100; //radius around anchor point of cup at which ball will be captured.var captureTime = thisComp.duration; //time at which capture begins, default to end of compvar currentDistance;for(t = 0; t < captureTime; t = t + thisComp.frameDuration) //loop through frames{currentDistance = length(ball.toComp(ball.anchorPoint.valueAtTime(t), t), cup.toComp(cup.anchorPoint.valueAtTime(t), t));if(currentDistance < captureRadius) captureTime = t; //if inside capture radius exit the loop}// executeease(time, captureTime, captureTime + captureDuration, value, cup.toComp(cup.anchorPoint.value));
nominal = 100offset = 900; // connect to slider controlthreshold = 0;//swidth = thisLayer.sourceRectAtTime().width;svalue = nominal/swidth; *// conditionalif(swidth>threshold){[svalue,svalue,svalue]*offset}
logo=thisLayer.source.layer(thisLayer.source.numLayers);sHeight=height/logo.height;sWidth=width/logo.width;s=Math.min(sHeight,sWidth);value*s
nominalWidth = 200;leftEdge = 0;for (i = 0; i <= width; i++){temp = sampleImage([i,height/2],[0.5,height/2],true,time);if (temp[3] > 0){leftEdge = i;break;}}rightEdge = width-1;for (i = width-1; i >= 0; i--){temp = sampleImage([i,height/2],[0.5,height/2],true,time);if (temp[3] > 0){rightEdge = i;break;}}value*nominalWidth/(rightEdge-leftEdge+1)// cacheCompareSamplesPerSecond 0
nominalHeight = 200;topEdge = 0;for (i = 0; i <= height; i++){temp = sampleImage([width/2,i],[width/2,0.5],true,time);if (temp[3] > 0){topEdge = i;break;}}bottomEdge = height-1;for (i = height-1; i >= 0; i--){temp = sampleImage([width/2,i],[width/2,0.5],true,time);if (temp[3] > 0){bottomEdge = i;break;}}alphaheight = (bottomEdge-topEdge+1); // in pixelsvalue*nominalHeight/alphaheight*100/value[1]
// for logos that are symmetrical//nominal values;n1 = 200;n2 = 400;n3 = 800;topEdge = 0;for (i = 0; i <= height; i++){temp = sampleImage([width/2,i],[width/2,0.5],true,time);if (temp[3] > 0){topEdge = i;break;}}leftEdge = 0;for (i = 0; i <= width; i++){temp = sampleImage([i,height/2],[0.5,height/2],true,time);if (temp[3] > 0){leftEdge = i;break;}}=aRatio = leftEdge/topHeight;if(aRatio<1.1){value*n1/leftEfge
Expressions comment to prevent calculations on every frame
https://aescripts.com/auto-crop/
You can't control the influence directly, but you can compound the ease such as below.
if (numKeys > 1){t1 = key(1).time;t2 = key(2).time;v1 = [0,540];v2 = [1080,540];t = easeOut(time,t1,t2,0,1); // using a normalized value to drive the 2nd easeeaseOut(t,0,1,v1,v2);}elsevalue
Interactive app for easing: http://gizma.com/easing/
Highly useful for learning about speed graph & math