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 <mckaymeis...@gmail.com
<mailto:mckaymeis...@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
___________________________________________________________________________________
___________________________________________________________________________________
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
___________________________________________________________________________________