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 <te...@fiee.net> 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 : ntg-context@ntg.nl / > https://www.ntg.nl/mailman/listinfo/ntg-context > webpage : https://www.pragma-ade.nl / http://context.aanhet.net > archive : https://bitbucket.org/phg/context-mirror/commits/ > wiki : https://contextgarden.net > ___________________________________________________________________________________ — Taco Hoekwater E: t...@bittext.nl genderfluid (all pronouns) ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / https://www.ntg.nl/mailman/listinfo/ntg-context webpage : https://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : https://contextgarden.net ___________________________________________________________________________________