Thanks again Hans and Fabrice, for the time you have both taken with my question and thanks for the code snippet Hans. Just one last confirmation from the snippet. Hans uses the correction factor cf on the x and yparts of a[i]. I taking this as meaning that this has to be done because the x and yparts of a[i] are returned as postscript points units and not as centimeters as in the pair. I maybe didn't make this clear in my original query. Thanks for your patience. Keith McKay On 26/11/2020 17:25, Hans Hagen wrote:
On 11/26/2020 6:12 PM, Keith McKay wrote:
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?
for squig = 1 step 1 until 15: xcoord := (xpart a[i]/cf); ycoord := (ypart a[i]/cf); xcoord := xcoord randomized (xcoord/50); ycoord := ycoord randomized (ycoord/50); pp := pp .. { curl 100 } (xcoord*cm, ycoord*cm); endfor;
Thanks Keith McKay
On 26/11/2020 15:19, Fabrice L wrote:
Hi keith,
Le 26 nov. 2020 à 10:09, Keith McKay
mailto:mckaymeister@gmail.com> 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 mailto:ntg-context@ntg.nl/http://www.ntg.nl/mailman/listinfo/ntg-context http://www.ntg.nl/mailman/listinfo/ntg-context webpage :http://www.pragma-ade.nl http://www.pragma-ade.nl//http://context.aanhet.net http://context.aanhet.net/ archive :https://bitbucket.org/phg/context-mirror/commits/ https://bitbucket.org/phg/context-mirror/commits/ wiki :http://contextgarden.net http://contextgarden.net/ ___________________________________________________________________________________
___________________________________________________________________________________
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 ___________________________________________________________________________________