enhancing MetaPost presentation progress graphics
Hi, I’d like a presentation progress indicator that looks like a boat on waves – and if it works, it can also become a bike on hills or a mars rover on dunes. But my math skills are lacking. Below’s a mostly working draft. * I find the waves not yet very convincing. Would it make sense to use a randomized sinus? (How?) * The boat should sit on the middle wave and be rotated by the current slope. I know I need the “time” of the upper curve and get the 1st derivation, but how? """ \setuppapersize[SW] \startuseMPgraphic{Waves} numeric height,stops,yoffset; stops := 10; height := OverlayHeight/10; path wave; draw (0,0)(OverlayWidth,0)(OverlayWidth,OverlayHeight) withcolor white withpen pencircle scaled 0.01; for j=1 upto 3: definecolor [name="Sea", y=(j/20), c=2*(j/10), m=(j/20)]; yoffset := height/(j*2); wave := (0,0)(0,yoffset)... for i=1 upto stops: (OverlayWidth*i/(stops+1), (yoffset) randomized (height/2)) ... endfor (OverlayWidth,yoffset)(OverlayWidth,0)cycle; fill wave withcolor "Sea"; endfor; pair pos; pos := (OverlayWidth * RealPageNumber/NOfPages, height/2 randomized 2); path ship; ship := (0,10)(70,10)...(60,0)(10,0)...cycle; fill ship xysized (10,5) shifted pos rotatedaround (pos, 15) withcolor red; \stopuseMPgraphic \defineoverlay[Waves][\useMPgraphic{Waves}] \setupbackgrounds[state=repeat] \setupbackgrounds[page][background={Waves}] \starttext \dorecurse{10}{\recurselevel\page} \stoptext """ Hraban
Hi, First, find the actual point along the curve of the wave you want, then you can ask for the direction of the wave at that time, and its point: \startuseMPgraphic{Waves} numeric height,stops,yoffset; stops := 10; height := OverlayHeight/10; path wave[]; % storing waves draw (0,0)(OverlayWidth,0)(OverlayWidth,OverlayHeight) withcolor white withpen pencircle scaled 0.01; for j=1 upto 3: definecolor [name="Sea", y=(j/20), c=2*(j/10), m=(j/20)]; yoffset := height/(j*2); wave[j] := (0,0)(0,yoffset)... for i=1 upto stops: (OverlayWidth*i/(stops+1), (yoffset) randomized (height/2)) ... endfor (OverlayWidth,yoffset); fill ((0,0)wave[j](OverlayWidth,0)cycle) withcolor "Sea"; endfor; xpos := OverlayWidth * RealPageNumber/NOfPages; path ship; ship := (0,10)(70,10)...(60,0)(10,0)...cycle; pair itime, iangle, boatpos; itime = (wave[3] intersectiontimes ((xpos,0)(xpos,infinity))); iangle = direction (xpart itime) of wave[3]; boatpos = (point (xpart itime) of wave[3]) shifted (5,0); % shift to center horizontally fill ship xysized (10,5) shifted boatpos rotatedaround (boatpos, angle iangle) withcolor red; \stopuseMPgraph
On 19 Jul 2023, at 12:32, Henning Hraban Ramm
wrote: Hi, I’d like a presentation progress indicator that looks like a boat on waves – and if it works, it can also become a bike on hills or a mars rover on dunes. But my math skills are lacking.
Below’s a mostly working draft.
* I find the waves not yet very convincing. Would it make sense to use a randomized sinus? (How?)
* The boat should sit on the middle wave and be rotated by the current slope. I know I need the “time” of the upper curve and get the 1st derivation, but how?
""" \setuppapersize[SW]
\startuseMPgraphic{Waves} numeric height,stops,yoffset; stops := 10; height := OverlayHeight/10; path wave;
draw (0,0)(OverlayWidth,0)(OverlayWidth,OverlayHeight) withcolor white withpen pencircle scaled 0.01;
for j=1 upto 3: definecolor [name="Sea", y=(j/20), c=2*(j/10), m=(j/20)]; yoffset := height/(j*2); wave := (0,0)(0,yoffset)... for i=1 upto stops: (OverlayWidth*i/(stops+1), (yoffset) randomized (height/2)) ... endfor (OverlayWidth,yoffset)(OverlayWidth,0)cycle; fill wave withcolor "Sea"; endfor;
pair pos; pos := (OverlayWidth * RealPageNumber/NOfPages, height/2 randomized 2); path ship; ship := (0,10)(70,10)...(60,0)(10,0)...cycle;
fill ship xysized (10,5) shifted pos rotatedaround (pos, 15) withcolor red; \stopuseMPgraphic
\defineoverlay[Waves][\useMPgraphic{Waves}]
\setupbackgrounds[state=repeat] \setupbackgrounds[page][background={Waves}]
\starttext
\dorecurse{10}{\recurselevel\page}
\stoptext """
Hraban ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntgcontext@ntg.nl / https://www.ntg.nl/mailman/listinfo/ntgcontext webpage : https://www.pragmaade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/contextmirror/commits/ wiki : https://contextgarden.net ___________________________________________________________________________________
— Taco Hoekwater E: taco@bittext.nl genderfluid (all pronouns)
Am 19.07.23 um 14:07 schrieb Taco Hoekwater:
First, find the actual point along the curve of the wave you want, then you can ask for the direction of the wave at that time, and its point:
Thank you!
pair itime, iangle, boatpos;
itime = (wave[3] intersectiontimes ((xpos,0)(xpos,infinity))); iangle = direction (xpart itime) of wave[3]; boatpos = (point (xpart itime) of wave[3]) shifted (5,0); % shift to center horizontally
There was still an error that I introduced: The boat on the first page is already way in, while on the last page it falls over the edge of the world. I fixed several other things and drew a nicer boat. Feel free to use it. Hraban
I am in awe at this. Thanks for sharing.
On Wed, 19 Jul 2023 at 18:11, Henning Hraban Ramm
Am 19.07.23 um 14:07 schrieb Taco Hoekwater:
First, find the actual point along the curve of the wave you want, then you can ask for the direction of the wave at that time, and its point:
Thank you!
pair itime, iangle, boatpos;
itime = (wave[3] intersectiontimes ((xpos,0)(xpos,infinity))); iangle = direction (xpart itime) of wave[3]; boatpos = (point (xpart itime) of wave[3]) shifted (5,0); % shift to center horizontally
There was still an error that I introduced: The boat on the first page is already way in, while on the last page it falls over the edge of the world.
I fixed several other things and drew a nicer boat. Feel free to use it.
Hraban
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntgcontext@ntg.nl / https://www.ntg.nl/mailman/listinfo/ntgcontext webpage : https://www.pragmaade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/contextmirror/commits/ wiki : https://contextgarden.net
___________________________________________________________________________________
participants (4)

Duncan Hothersall

Floris van Manen

Henning Hraban Ramm

Taco Hoekwater