From 352a2686282e95b2869728f8f321688f7e216d80 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Thu, 7 May 2020 11:47:12 +0200 Subject: 2020-05-07 11:00:00 --- .../manuals/luametafun/luametafun-poisson.tex | 159 +++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 doc/context/sources/general/manuals/luametafun/luametafun-poisson.tex (limited to 'doc/context/sources/general/manuals/luametafun/luametafun-poisson.tex') diff --git a/doc/context/sources/general/manuals/luametafun/luametafun-poisson.tex b/doc/context/sources/general/manuals/luametafun/luametafun-poisson.tex new file mode 100644 index 000000000..cd4b6ddab --- /dev/null +++ b/doc/context/sources/general/manuals/luametafun/luametafun-poisson.tex @@ -0,0 +1,159 @@ +% language=us + +\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 + -- cgit v1.2.3