let( margin, 0.1, eukleides("",-0.1-margin,-margin,sqrt(2)+0.1+margin,1+margin, let( ease, x -> if(x<0.5, 4x^3, 1 - ((2-2x)^3)/2), frame, (from,to) -> ease(clamp((time-from)/(to-from), 0, 1)), frame_lengths, [3,1,1,5], frame_times, foldl((a,b) -> a+[a[-1]+b], [0], frame_lengths), frame_number, (take(1, i -> frame_times[i]>=time, 0..len(frame_times)-1)+[len(frame_times)])[0]-1, frames, frame(x,y) for: [x,y] of: zip(frame_times, frame_times[2..len(frame_times)]), [a,b,c,d], rectangle(sqrt(2),1), e, point(1,0), f, point(1,1), square_label, center(a..e..f..d) text("210×210") size(0.5), strip_label, center(e..b..c..f) text("87×210") size(0.5), [ switch( frame_number<3, [a..b..c..d , (e..f) opacity(frames[0]) , [square_label, strip_label ] * opacity(frames[1]) ] , [ [(a..e..f..d), square_label] - vector(frames[3]*0.1, 0) , (x + vector(frames[3]*0.1, 0)) for: x of: [(e..b..c..f), strip_label] ] ) //, point(0.7,0.7) text(jme_string(frame_times)) size(0.4) //, point(0.7,0.5) text(jme_string(frames)) size(0.4) //, point(0.5,0.3) text(jme_string(frame_number)) size(0.5) //, point(0.5,0.1) text(jme_string(time)) size(0.5) ] ) ) )