Mailing List AE-List@media-motion.tv ? Message #48128
From:
Bruce Wainer <brwainer@gmail.com>
Subject:
Re: [AE] Divide by Zero Errors...
Date:
Wed, 13 Mar 2013 22:25:51 -0400
To:
After Effects Mail List <AE-List@media-motion.tv>
I'm glad you got it to work. On my end, no matter what I do I can't cause a divide by zero error to occur. Odd.
Bruce
On Wed, Mar 13, 2013 at 10:22 PM, Andrew Embury <aembury@gmail.com> wrote:
Didn't seem to work, however, I think I found the problem.
I adjusted the "decay = 12.0;" to "decay = 6.0" and it seemed to fix everything...
On Wed, Mar 13, 2013 at 10:09 PM, Bruce Wainer <brwainer@gmail.com> wrote:
Well for now just replace it with a dummy value, like 10 or 5 or 54321. We have to see if that makes the errors go away. After we determine whether or not "Math.exp(decay*t)" is causing the errors, then we can put it back in and make the errors go away. You just can't fix a problem before you determine where the problem is.
Bruce
On Wed, Mar 13, 2013 at 10:06 PM, Andrew Embury <aembury@gmail.com> wrote:
Hey Bruce!
What would I replace "Math.exp(decay*t)" with exactly?
I'm sorry, I'm not very programming minded when it comes to matters such as this. I've dabbled before but those days are far behind me.
Thank you for your time.
- Andrew
On Wed, Mar 13, 2013 at 10:00 PM, Bruce Wainer <brwainer@gmail.com> wrote:
Andrew,
The only thing I can think of is that the Math.exp() method is returning 0 or infinity when a large number is passed in. So if e^(decay*t) is too large of a number, the result becomes 0 or infinity (not sure which it would be but either way division would be impossible). With exponents this is really easy to do, as the numbers get very large very quickly.
Just to test, if you replace the "Math.exp(decay*t)" with something else, do the errors go away? If so you've found the problem code. I think it has to be though because it's the only divisor that is variable. The only solution would be to protect that code by creating a variable to hold that result. If it is 0 or infinity, reassign that variable to a very very large number (preferably the maximum value that the datatype can hold).
Sorry for using general programming terms, I've done much more Java, PHP, and SQL lately than Javascript (which the After Effects expression engine is based on). Oh the joys of being a Media Arts and Telecommunications dual major.
Bruce Wainer
On Wed, Mar 13, 2013 at 8:55 PM, Andrew Embury <aembury@gmail.com> wrote:
Hey guys/ gals!
Quick question....
Whilst animating in AE tonight I was using the following expression:
amp = .03;
freq = 4.0;
decay = 12.0;
n = 0;
if (numKeys > 0){
n = nearestKey(time).index;
if (key(n).time > time){
n--;
}}
if (n == 0){ t = 0;
}else{
t = time - key(n).time;
}
if (n > 0){
v = velocityAtTime(key(n).time - thisComp.frameDuration/10);
value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
}else{value}
Never ever have I since have encountered so many "Divide by Zero" errors in my life with AE.
Currently working with CS6 and I am applying this expression to Scale, Position, and Rotation.