POV-Ray : Newsgroups : povray.general : Dumb clock animation question Server Time
20 Apr 2024 06:29:59 EDT (-0400)
  Dumb clock animation question (Message 6 to 15 of 15)  
<<< Previous 5 Messages Goto Initial 10 Messages
From: JimT
Subject: Re: Dumb clock animation question
Date: 18 Feb 2019 12:40:05
Message: <web.5c6aed9530cdf982c97227110@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
>
>
> Thank you! That's perfect.
>
>
> Mike

I hesitate to try to improve on a TOK solution, but in my animations, a very
early line will be

#declare MyTime = clock;

then I use MyTime wherever I would use clock. This lets me #declare MyTime =
0.6667, for example to go to a position in the animation to test a particular
stage without running the whole animations. You would pass MyTime to the #macro.
This may be obvious, but it is an improvement.


Post a reply to this message

From: Mike Horvath
Subject: Re: Dumb clock animation question
Date: 19 Feb 2019 00:15:33
Message: <5c6b90f5@news.povray.org>
On 2/18/2019 12:38 PM, JimT wrote:
> 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
>>
>>
>> Thank you! That's perfect.
>>
>>
>> Mike
> 
> I hesitate to try to improve on a TOK solution, but in my animations, a very
> early line will be
> 
> #declare MyTime = clock;
> 
> then I use MyTime wherever I would use clock. This lets me #declare MyTime =
> 0.6667, for example to go to a position in the animation to test a particular
> stage without running the whole animations. You would pass MyTime to the #macro.
> This may be obvious, but it is an improvement.
> 
> 


I'll keep that in mind, thanks! What I usually do is set the clock value 
using the +K switch if I need to. I get confused by all the INI settings 
sometimes too.


Mike


Post a reply to this message

From: Mike Horvath
Subject: Re: Dumb clock animation question
Date: 19 Feb 2019 00:18:05
Message: <5c6b918d$1@news.povray.org>
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.


Mike


Post a reply to this message

From: clipka
Subject: Re: Dumb clock animation question
Date: 19 Feb 2019 04:28:04
Message: <5c6bcc24$1@news.povray.org>
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.


Post a reply to this message

From: Bald Eagle
Subject: Re: Dumb clock animation question
Date: 19 Feb 2019 07:15:00
Message: <web.5c6bf27730cdf982765e06870@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.

insert

#declare S = sin(S*Tau);
or
#declare S = abs(sin(S*Tau));

before the line
S

However you're running it.


Post a reply to this message

From: JimT
Subject: Re: Dumb clock animation question
Date: 19 Feb 2019 09: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 09: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 13: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 06: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 02: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 5 Messages Goto Initial 10 Messages

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