% language=us runpath=texruns:manuals/luametafun \environment luametafun-style \startcomponent luametafun-poisson \startchapter[title={Poisson}] When, after a post on the \CONTEXT\ mailing list, Aditya pointed me to an article on mazes I ended up at poisson distributions which to me looks nicer than what I normally do, fill a grid and then randomize the resulting positions. With some hooks this can be used for interesting patterns too. The algorithm is based on the discussion at: \starttyping http://devmag.org.za/2009/05/03/poisson-disk-sampling \stoptyping Other websites mention some variants on that but I saw no reason to look into those in detail. I can imagine more random related variants in this domain so consider this an appetizer. The user is rather simple because some macro is assumed to deal with the rendering of the distributed points. We just show some examples (because the interface might evolve). \startbuffer \startMPcode draw lmt_poisson [ width = 40, height = 40, distance = 1, count = 20, macro = "draw" ] xsized 4cm ; \stopMPcode \stopbuffer \typebuffer[option=TEX] \startlinecorrection \getbuffer \stoplinecorrection \startbuffer \startMPcode vardef tst (expr x, y, i, n) = fill fullcircle scaled (10+10*(i/n)) shifted (10x,10y) withcolor "darkblue" withtransparency (1,.5) ; enddef ; draw lmt_poisson [ width = 50, height = 50, distance = 1, count = 20, macro = "tst", arguments = 4 ] xsized 6cm ; \stopMPcode \stopbuffer \typebuffer[option=TEX] \startlinecorrection \getbuffer \stoplinecorrection \startbuffer \startMPcode vardef tst (expr x, y, i, n) = fill fulldiamond scaled (5+5*(i/n)) randomized 2 shifted (10x,10y) withcolor "darkgreen" ; enddef ; draw lmt_poisson [ width = 50, height = 50, distance = 1, count = 20, macro = "tst", initialx = 10, initialy = 10, arguments = 4 ] xsized 6cm ; \stopMPcode \stopbuffer \typebuffer[option=TEX] \startlinecorrection \getbuffer \stoplinecorrection \startbuffer \startMPcode{doublefun} vardef tst (expr x, y, i, n) = fill fulldiamond randomized (.2*i/n) shifted (x,y); enddef ; draw lmt_poisson [ width = 150, height = 150, distance = 1, count = 20, macro = "tst", arguments = 4 ] xsized 6cm withcolor "darkmagenta" ; \stopMPcode \stopbuffer \typebuffer[option=TEX] \startlinecorrection \getbuffer \stoplinecorrection \startbuffer \startMPcode vardef tst (expr x, y, i, n) = draw externalfigure "cow.pdf" ysized (10+5*i/n) shifted (10x,10y); enddef ; draw lmt_poisson [ width = 20, height = 20, distance = 1, count = 20, macro = "tst" arguments = 4, ] xsized 6cm ; \stopMPcode \stopbuffer \typebuffer[option=TEX] \startlinecorrection \getbuffer \stoplinecorrection The supported parameters are: \starttabulate[|T|T|T|p|] \FL \BC name \BC type \BC default \BC comment \NC \NR \ML \NC width \NC numeric \NC 50 \NC \NC \NR \NC height \NC numeric \NC 50 \NC \NC \NR \NC distance \NC numeric \NC 1 \NC \NC \NR \NC count \NC numeric \NC 20 \NC \NC \NR \NC macro \NC string \NC "draw" \NC \NC \NR \NC initialx \NC numeric \NC 10 \NC \NC \NR \NC initialy \NC numeric \NC 10 \NC \NC \NR \NC arguments \NC numeric \NC 4 \NC \NC \NR \LL \stoptabulate \stopchapter \stopcomponent