On Mon, Aug 1, 2016 at 10:12 AM, Hans Hagen <pra...@wxs.nl> wrote: > On 8/1/2016 8:03 AM, Mikael P. Sundqvist wrote: >> >> Hi! >> >> I look for a way to randomize control points of a path, leaving the >> coordinates themselves untouched. >> >> The reason is the following: I want to draw (for example) a circle >> with a triangle inside, and I want them to look slightly randomized. >> If I do (see attached pdf for a typical result of this) >> >> \startMPpage >> draw fullcircle scaled 2cm randomized 0.1cm; >> draw ((1cm,0)--(0,1cm)--(-1cm,0)--cycle) randomized 0.1cm; >> \stopMPpage >> >> then the corners of the triangle does not stay on the circle (and I >> want them to). [I dont want the triangle to consist of perfectly >> straight lines, so I cannot (directly) draw the triangle using >> different points along the randomized circle] I imagine that one could >> achieve what I want if one could randomize the control points only. > > > i'll add > > primarydef p randomizedcontrols s = ( > if path p : > for i=0 upto length(p)-1 : > (point i of p) .. controls > ((postcontrol i of p) randomshifted s) and > ((precontrol (i+1) of p) randomshifted s) .. > endfor > if cycle p : > cycle > else : > (point length(p) of p) > fi > else : > p randomized s > fi > ) enddef ; > >> Also, is it possible to randomize a picture (consisting of several >> paths/points) somehow, without randomizing each part of it manually? > > > so: > > vardef mfun_randomized_path(expr p,s) = > for i=0 upto length(p)-1 : > (point i of p) .. controls > ((postcontrol i of p) randomshifted s) and > ((precontrol (i+1) of p) randomshifted s) .. > endfor > if cycle p : > cycle > else : > (point length(p) of p) > fi > enddef; > > vardef mfun_randomized_picture(expr p,s) = > save currentpicture ; > picture currentpicture ; > currentpicture := nullpicture ; > for i within p : > addto currentpicture > if stroked i : > doublepath pathpart i randomizedcontrols s > dashed dashpart i > withpen penpart i > withcolor colorpart i > withprescript prescriptpart i > withpostscript postscriptpart i > elseif filled i : > contour pathpart i randomizedcontrols s > withpen penpart i > withcolor colorpart i > withprescript prescriptpart i > withpostscript postscriptpart i > else : > also i > fi > ; > endfor ; > currentpicture > enddef ; > > primarydef p randomizedcontrols s = ( > if path p : > mfun_randomized_path(p,s) > elseif picture p : > mfun_randomized_picture(p,s) > else : > p randomized s > fi > ) enddef ; > > with > > draw fullcircle scaled 2cm randomizedcontrols 0.1cm; > draw ((1cm,0)--(0,1cm)--(-1cm,0)--cycle) randomizedcontrols 0.1cm; > > draw image ( > draw fullcircle scaled 2cm ; > draw ((1cm,0)--(0,1cm)--(-1cm,0)--cycle); > ) randomizedcontrols 0.1cm ; > > > > ----------------------------------------------------------------- > Hans Hagen | PRAGMA ADE > Ridderstraat 27 | 8061 GH Hasselt | The Netherlands > tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl > ----------------------------------------------------------------- > ___________________________________________________________________________________ > If your question is of interest to others as well, please add an entry to > the Wiki! > > maillist : ntg-context@ntg.nl / > http://www.ntg.nl/mailman/listinfo/ntg-context > webpage : http://www.pragma-ade.nl / http://tex.aanhet.net > archive : http://foundry.supelec.fr/projects/contextrev/ > wiki : http://contextgarden.net > ___________________________________________________________________________________
Wow! That was fast! I just updated and it indeed works as expected. I hate to ask another thing when I just got this fast and nice help, but is there also a way to change the control points in such a way that no _new_ sharp corners occur? /Mikael ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________