ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* Randomize control points in metapost/metafun?
@ 2016-08-01  6:03 Mikael P. Sundqvist
  2016-08-01  8:12 ` Hans Hagen
  0 siblings, 1 reply; 4+ messages in thread
From: Mikael P. Sundqvist @ 2016-08-01  6:03 UTC (permalink / raw)
  To: mailing list for ConTeXt users

[-- Attachment #1: Type: text/plain, Size: 912 bytes --]

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.

Also, is it possible to randomize a picture (consisting of several
paths/points) somehow, without randomizing each part of it manually?

/Mikael

[-- Attachment #2: ctx-listexample.pdf --]
[-- Type: application/pdf, Size: 3470 bytes --]

[-- Attachment #3: Type: text/plain, Size: 485 bytes --]

___________________________________________________________________________________
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
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Randomize control points in metapost/metafun?
  2016-08-01  6:03 Randomize control points in metapost/metafun? Mikael P. Sundqvist
@ 2016-08-01  8:12 ` Hans Hagen
  2016-08-01 10:47   ` Mikael P. Sundqvist
  0 siblings, 1 reply; 4+ messages in thread
From: Hans Hagen @ 2016-08-01  8:12 UTC (permalink / raw)
  To: ntg-context

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
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Randomize control points in metapost/metafun?
  2016-08-01  8:12 ` Hans Hagen
@ 2016-08-01 10:47   ` Mikael P. Sundqvist
  2016-08-01 11:31     ` Hans Hagen
  0 siblings, 1 reply; 4+ messages in thread
From: Mikael P. Sundqvist @ 2016-08-01 10:47 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On Mon, Aug 1, 2016 at 10:12 AM, Hans Hagen <pragma@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
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Randomize control points in metapost/metafun?
  2016-08-01 10:47   ` Mikael P. Sundqvist
@ 2016-08-01 11:31     ` Hans Hagen
  0 siblings, 0 replies; 4+ messages in thread
From: Hans Hagen @ 2016-08-01 11:31 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On 8/1/2016 12:47 PM, Mikael P. Sundqvist wrote:

> 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?

that's a challenge for alan (who likes mp challenges) as it involves math

Hans

-----------------------------------------------------------------
                                           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
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-08-01 11:31 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-01  6:03 Randomize control points in metapost/metafun? Mikael P. Sundqvist
2016-08-01  8:12 ` Hans Hagen
2016-08-01 10:47   ` Mikael P. Sundqvist
2016-08-01 11:31     ` Hans Hagen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).