/First « //uniformdeviate(1) - 0.5// » could be modified to « //uniformdeviate(0.5)//»./ / / /To add noise, you can use the randomized function of Metafun. For exemple, you can write:/ / / /draw pp randomized 1cm ;/ / / That's true Fabrice but in this use case I wanted a random number between -0.5 and +0.5, and I wasn't sure I would get that with randomized. Thanks again Keith McKay/ / On 26/11/2020 17:20, Fabrice L wrote: > Keith, > >> Le 26 nov. 2020 à 12:12, Keith McKay > > a écrit : >> >> Thanks Fabrice and Hans. >> >> I now see I can simplify some lines of the code: >> >> pp := ((xpart a[i])/cf*cm, (ypart a[i])/cf*cm); now becomes pp:= a[i]; >> >> and >> >> pp := pp --- ((xpart a[i+1]/cf)*cm, (ypart a[i+1])/cf*cm); now >> becomes pp := pp --- a[i +1] ; >> >> However I still have the problem in the calculation of xcoord and >> ycoord which are used in the creation of path pp: >> for squig = 1 step 1 until 15: >> xcoord := uniformdeviate(1) - 0.5 + (xpart a[i]/cf); >> ycoord := uniformdeviate(1) - 0.5+ (ypart a[i]/cf); >> pp := pp .. {curl 100}(xcoord*cm, ycoord*cm); >> endfor; >> I'm adding a small random amount to the x and ypart of the pair a[i] >> to produce a path that is like a squiggle (gribouiller in French, >> according to Google). I have to use cf to convert to the x and yparts >> to centimeters since they seem to loose the centimeter units on >> separation. I can't see anyway round this, or am I missing something? >> Thanks >> Keith McKay > > First « uniformdeviate(1) - 0.5 » could be modified to « > uniformdeviate(0.5)». > > To add noise, you can use the randomized function of Metafun. For > exemple, you can write: > > draw pp randomized 1cm ; > > Fabrice. > > > >> On 26/11/2020 15:19, Fabrice L wrote: >>> Hi keith, >>> >>>> Le 26 nov. 2020 à 10:09, Keith McKay >>> > a écrit : >>>> >>>> Hi, >>>> >>>> I have been using xpart and ypart to extract these values from >>>> pairs of points in a path but I wasn't getting the correct result. >>>> I was expecting: >>>> >>>> pair (2cm, 11cm) to give xpart 2 and ypart 11 >>>> >>>> However I was getting: >>>> >>>> pair (2cm, 11cm) -> xpart 56.6929 and ypart 311.8096 >>>> >>>> After much head scratching and reading the MetaPost and MetaFun >>>> manuals, I realised that the units of xpart or ypart are in >>>> Postcript points or Big Points (bp), and 1 bp is 1/72 of an inch, >>>> and thus to get the values of xpart or ypart in cm I would have to >>>> use a correction factor. I had made the assumption that since the x >>>> and ypart in the pair was in cm that the result would be in cm, but >>>> I see now that this is not the case. Will I have to continue doing >>>> this or is there some magic within MetaFun which takes account of >>>> the units in a pair and outputs the result of x and ypart in the >>>> same units? >>>> >>>> The MWE belows shows what I have been doing. >>>> >>>> Thanks >>>> >>>> Keith McKay >>>> >>>> %%% MWE %%% >>>> \setuppapersize [A5, landscape][A4, portrait] >>>> \usecolors[crayola] >>>> \starttext >>>> \startMPpage >>>> StartPage; >>>> width := PaperWidth ; height := PaperHeight ; unit := cm ; >>>> numeric squig; >>>> pair a[]; a0 = (2cm,11cm); a1 = (4cm,10cm); a2 = (6cm,9cm); a3 = >>>> (8cm,8cm); >>>> show xpart a[0], ypart a[0]; %Example of result from x and ypart >>>> before applying correction factor (cf) % >>>> cf := 72/2.54; %Converts points/in to points/cm% >>>> path pp; >>>> for i = 0 step 1 until 3: >>>> pp := ((xpart a[i])/cf*cm, (ypart a[i])/cf*cm); >>>> for squig = 1 step 1 until 15: >>>> xcoord := uniformdeviate(1) - 0.5 + (xpart a[i]/cf); >>>> ycoord := uniformdeviate(1) - 0.5+ (ypart a[i]/cf); >>>> pp := pp .. {curl 100}(xcoord*cm, ycoord*cm); >>>> endfor; >>>> pp := pp --- cycle; >>>> if i < 3 : >>>> pp := pp --- ((xpart a[i+1]/cf)*cm, (ypart a[i+1])/cf*cm); >>>> fi; >>>> f :=((1.4 - 0.6) * uniformdeviate(1)) + 0.8; % Factor to >>>> lighten/darken colour % >>>> draw pp withpen pencircle xscaled 0.5mm yscaled .1mm rotated 45 >>>> withcolor (f[white,\MPcolor{BurntSienna}]); >>>> endfor; >>>> StopPage; >>>> \stopMPpage >>>> \stoptext >>>> %%%%%%%%%%%%%% >>>> >>> >>> MetaPost (MetaFun) is taking care of everything regarding units. As >>> you ave discovered, everything is translated to a unique internal >>> dimension. So you can write: >>> >>>  a := (1cm,2in) ; >>> >>> with no problem. The « cm » and « in » parts of the expression will >>> become numbers to translate this number on the right unit. >>> Fabrice. >>>> >>>> ___________________________________________________________________________________ >>>> 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://context.aanhet.net >>>> archive >>>>  :https://bitbucket.org/phg/context-mirror/commits/ >>>> wiki >>>>     :http://contextgarden.net >>>> ___________________________________________________________________________________ >>>> >