POV-Ray : Newsgroups : povray.general : Dumb clock animation question Server Time: 20 Jun 2019 06:56:55 GMT
  Dumb clock animation question (Message 11 to 15 of 15)  
<<< Previous 10 Messages Goto Initial 10 Messages
From: JimT
Subject: Re: Dumb clock animation question
Date: 19 Feb 2019 14:25:01
Message: <web.5c6c109030cdf982be7517870@news.povray.org>
clipka <ano### [at] anonymousorg> wrote:
> Am 19.02.2019 um 06:18 schrieb Mike Horvath:
> > On 2/17/2019 7:27 AM, Tor Olav Kristensen wrote:
> >> #macro MacroName(StartTime, EndTime)
> >>
> >>      #local R = (clock - StartTime)/(EndTime - StartTime);
> >>      #local S = min(max(0, R), 1);
> >>
> >>      S
> >>
> >> #end // macro MacroName
> >
> > What do you think would be a good way to gradually speed up and then
> > slow down the motions using this macro? I'm thinking it would require a
> > sine wave (or some other bell curve), but am not sure how to apply it.
>
> A spline might help with this.

Using a spline would de-linearise the time variable, which isn't the idea. The
simplest way is to just use a cubic:

#macro Spline_Param(StartTime,EndTime)
//
#local LinParam    = (clock - StartTime)/(EndTime - StartTime);
#local LinParam    = min(max(0,LinParam),1);
//
#local SplineParam =   2*LinParam*LinParam*(3/2 - LinParam);
//
SplineParam
//
#end // Spline_Param

but this doesn't have any adjustment. If you are interested in a constant
acceleration, followed by constant speed, followed by constant deceleration,
respond and I'll do it.


Post a reply to this message

From: Tor Olav Kristensen
Subject: Re: Dumb clock animation question
Date: 19 Feb 2019 14:45:00
Message: <web.5c6c15c330cdf982a48ba9b60@news.povray.org>
Mike Horvath <mik### [at] gmailcom> wrote:
> On 2/17/2019 7:27 AM, Tor Olav Kristensen wrote:
> > #macro MacroName(StartTime, EndTime)
> >
> >      #local R = (clock - StartTime)/(EndTime - StartTime);
> >      #local S = min(max(0, R), 1);
> >
> >      S
> >
> > #end // macro MacroName
>
> What do you think would be a good way to gradually speed up and then
> slow down the motions using this macro? I'm thinking it would require a
> sine wave (or some other bell curve), but am not sure how to apply it.

If you want to use a simple trigonometric function then I recommend using a
cosine wave, like this:


#macro MacroName(StartTime, EndTime)

    #local R = (clock - StartTime)/(EndTime - StartTime);
    #local S = min(max(0, R), 1)*pi;
    #local T = (1 - cos(S))/2;

    T

#end // macro MacroName


Now S will vary between 0 and +pi. cos(S) will vary between +1 and -1. And T
will vary between 0 and +1.

https://upload.wikimedia.org/wikipedia/commons/d/d2/Sine_and_Cosine.svg

--
Tor Olav
http://subcube.com
https://github.com/t-o-k/


Post a reply to this message

From: Mike Horvath
Subject: Re: Dumb clock animation question
Date: 19 Feb 2019 18:13:01
Message: <5c6c472d$1@news.povray.org>
On 2/19/2019 9:42 AM, Tor Olav Kristensen wrote:
> Now S will vary between 0 and +pi. cos(S) will vary between +1 and -1. And T
> will vary between 0 and +1.
> 
> https://upload.wikimedia.org/wikipedia/commons/d/d2/Sine_and_Cosine.svg
> 


Thank you again. That is what I needed.


Mike


Post a reply to this message

From: JimT
Subject: Re: Dumb clock animation question
Date: 20 Feb 2019 11:05:01
Message: <web.5c6d343930cdf982c97227110@news.povray.org>
Mike Horvath <mik### [at] gmailcom> wrote:
> On 2/19/2019 9:42 AM, Tor Olav Kristensen wrote:
> > Now S will vary between 0 and +pi. cos(S) will vary between +1 and -1. And T
> > will vary between 0 and +1.
> >
> > https://upload.wikimedia.org/wikipedia/commons/d/d2/Sine_and_Cosine.svg
> >
>
>
> Thank you again. That is what I needed.
>
>
> Mike

TOK's cosine formulation is actually extremely close to constant acceleration
for half the period followed by constant deceleration.

The following (tested in Matlab, not POVRay, but I think I've transliterated it)
allows for linear interpolation for AccFrac = 0, something very close to the
cosine for AccFrac = 0.5 (constant acceleration for half the period followed by
constant deceleration for the other half) or an acceleration followed by a
coast, followed by a deceleration for 0 < AccFrac < 0.5

#macro AccDec(StartTime,EndTime,AccFrac)
//
// AccFrac should be between 0 and 0.5. It will be clipped.
//
#local KFrac    = min(max(0,AccFrac),0.5);
//
#local RelTime  = (clock - StartTime)/(EndTime - StartTime);
#local RelTime  = min(max(0,RelTime),1);
//
#if(KFrac = 0)
  #local SP = RelTime;
#elseif(RelTime < KFrac)
  #local SP = RelTime*RelTime/(2*KFrac*(1-KFrac));
#elseif(RelTime < 1 - KFrac)
  #local SP = RelTime/(1-KFrac) - KFrac/(2*(1-KFrac));
#else
  #local SP = 1 - (1 - RelTime)*(1 - RelTime)/(2*KFrac*(1-KFrac));
#end
  SP
//
#end


Post a reply to this message

From: Mike Horvath
Subject: Re: Dumb clock animation question
Date: 21 Feb 2019 07:37:45
Message: <5c6e5549$1@news.povray.org>
I will keep this in mind. Constant acceleration was what I was trying to 
achieve.


Mike



On 2/20/2019 6:04 AM, JimT wrote:
> #macro AccDec(StartTime,EndTime,AccFrac)
> //
> // AccFrac should be between 0 and 0.5. It will be clipped.
> //
> #local KFrac    = min(max(0,AccFrac),0.5);
> //
> #local RelTime  = (clock - StartTime)/(EndTime - StartTime);
> #local RelTime  = min(max(0,RelTime),1);
> //
> #if(KFrac = 0)
>    #local SP = RelTime;
> #elseif(RelTime < KFrac)
>    #local SP = RelTime*RelTime/(2*KFrac*(1-KFrac));
> #elseif(RelTime < 1 - KFrac)
>    #local SP = RelTime/(1-KFrac) - KFrac/(2*(1-KFrac));
> #else
>    #local SP = 1 - (1 - RelTime)*(1 - RelTime)/(2*KFrac*(1-KFrac));
> #end
>    SP
> //
> #end


Post a reply to this message

<<< Previous 10 Messages Goto Initial 10 Messages

Copyright 2003-2008 Persistence of Vision Raytracer Pty. Ltd.