[R] rgl: insert pauses in animation sequence / movie formats other than gif?

Michael Friendly friendly at yorku.ca
Tue Jun 7 19:05:27 CEST 2011


On 6/7/2011 12:36 PM, Duncan Murdoch wrote:
> On 07/06/2011 12:22 PM, Michael Friendly wrote:
>> On 6/7/2011 10:52 AM, Duncan Murdoch wrote:
>> >
>> >  Something like this works:
>> >
>> >  play3d(par3dinterp(times=c(0,5,6,11,12,17),
>> >               userMatrix=list(m1,m1,m2,m2,m3,m3),
>> >               method="linear"))
>> >
>> >  The "linear" says to use linear interpolation between time points, so
>> >  it will stay exactly constant when the userMatrix doesn't change.  If
>> >  you leave it out, it uses spline interpolation, and that gives some
>> >  irritating overshooting.
>> Thanks very much for this, Duncan.
>>
>> Something like this would make an excellent documentation example for
>> play3d/movie3d, or perhaps better
>> par3dinterp, even under \dontrun{}.
>>
>> I take it that the times are relative rather than absolute, and time is
>> scaled according to duration and
>> fps when the scene is play3d()'d.  Yes?  If so, the description for
>> time= could also be clarified.
>
> Definitely it should be clarified in the docs; they are absolute 
> times, in units of seconds.  Things get a little complicated when you 
> go past the last time (17 seconds):  there are a number of different 
> extrapolation methods described in ?par3dinterp.
>
> What the par3dinterp function returns is a function that takes a time 
> (expressed in seconds) and computes the parameters (i.e. the 
> userMatrix in the example) that should be in effect at that time.  It 
> doesn't know anything about fps, that's used by play3d to choose what 
> times to pass to that constructed function.  The function that play3d 
> is given can do lots of things other than returning new viewpoint 
> parameters; for example, the flag demo redraws the scene in every 
> frame (using skipRedraw=TRUE to avoid showing partial versions).
>
> Duncan

OK, I don't exactly understand all the relationships among time (in 
seconds) for par3dinterp() and duration
and fps for play3d() and movie3d(), but the following gave me *exactly* 
what I was looking for: transitions
among 5 views, with pauses at each:

# define an order to show the views and basic times for each:
views <- list(M1, M3, M4, M5, M2)
times <- 5 * (seq_along(views)-1)

# add pauses; use linear interpolation in time
interp3d.fun <- par3dinterp( times=sort(c(times, times+2)),
             userMatrix=rep(views, each=2),  method="linear")
play3d( interp3d.fun, duration=2*60/5)

best,
-Michael



-- 
Michael Friendly     Email: friendly AT yorku DOT ca
Professor, Psychology Dept.
York University      Voice: 416 736-5115 x66249 Fax: 416 736-5814
4700 Keele Street    Web:   http://www.datavis.ca
Toronto, ONT  M3J 1P3 CANADA



More information about the R-help mailing list