Thanks Mikael,
Le 20 déc. 2021 à 02:21, Mikael Sundqvist via ntg-context
a écrit : Hi,
would it be an option for you to do
newcircleA := circleA cutbefore P1 cutafter P2 -- cycle ;
In that case you avoid extra points.
You are right, in this simple case, your solution avoid the problem, and is applicable in some of my cases (I have to rethink the code). Thanks for the proposition ! But in others cases this is not possible (I think). Imagine I wish to do a « partial moon » from the two circles in my minimal example (see bottom right of the attached pdf): newcircleA := circleA cutbefore P1 cutafter P2 .. reverse(circleB cutbefore P1 cutafter P2) .. cycle; I need 10 points to define the shape, but as my connections are duplicated, I have 12 points. The solution (I thought) would be to use the « & » operator : newcircleA := circleA cutbefore P1 cutafter P2 & reverse(circleB cutbefore P1 cutafter P2) & cycle ; But this does not work (same reason as before: "! Paths don't touch; `&' will be changed to `..'."). The compete minimal code (if somebody wants to plus with it) is here : % ——————————————————————— \startMPpage path circleA , circleB ; pair P[]; defaultscale := 0.4 ; circleA := fullcircle scaled 1in randomized 3 ; circleB := fullcircle scaled 1in randomized 3 shifted(0.3in,0.3in) ; draw circleA withcolor blue ; draw circleB withcolor red ; P[1] := circleA intersectionpoint circleB ; dotlabel.lft("$P_1$",P[1]) ; dotlabel.rt("$\blue\tfx P_0^A$",point 0 of circleA) ; P[2] := reverse(circleA) intersectionpoint circleB ; dotlabel.rt("$P_2$",P[2]) ; dotlabel.rt("$\red\tfx P_0^B$",point 0 of circleB) ; path newcircleA , newcircleB ; % newcircleA := (circleA cutbefore P1 cutafter P2 ) & (P2 -- P1) & cycle ; % previous line gives an error : % "! Paths don't touch; `&' will be changed to `..'." newcircleA := circleA cutbefore P1 cutafter P2 -- (P2 -- P1) -- cycle ; newcircleA := newcircleA xshifted 2in ; draw newcircleA withcolor darkgreen ; newcircleB := (circleB cutafter P1) -- (P1 -- P2) -- (circleB cutbefore P2 ) & cycle ; newcircleB := newcircleB xshifted 2in ; draw newcircleB withcolor black ; drawpoints newcircleA ; drawpointlabels newcircleA ; % Mikael solution newcircleA := circleA cutbefore P1 cutafter P2 -- cycle ; newcircleA := newcircleA yshifted -1.5in ; draw newcircleA withcolor darkgreen ; drawpoints newcircleA ; drawpointlabels newcircleA ; % partial moon newcircleA := circleA cutbefore P1 cutafter P2 .. reverse(circleB cutbefore P1 cutafter P2) .. cycle; % & (reverse(circleB) cutbefore P2 cutafter P1) & cycle; newcircleA := newcircleA shifted(2in,-1.5in) ; draw newcircleA withcolor magenta ; drawpoints newcircleA ; drawpointlabels newcircleA ; \stopMPpage % ——————————————————————— Thanks for any help ! Fabrice.
/Mikael
On Mon, Dec 20, 2021 at 5:30 AM Fabrice L via ntg-context
wrote: Dear list,
I have a problem connecting path with the operator « & » (page 16 Metafun manual). The problem is illustrated by the code (and the joined PDF) which follows.
I draw random cycled forms (left part of the figure) and when they interact, they are modified to « fit together » (right part of the figure) . When building these new forms, I connect paths (usually two or three depending on position 0 of the path); the last point a path is the same as the first point of the next path ; for exemple, to modify the blue circle, named « circleA », I take the circle A from P1 to P2, then a segment from P2 to P1 and cycle to have a closed path. So I should be able to do :
newcircleA := circleA cutbefore P1 cutafter P2 & (P2 -- P1) & cycle ;
The « & » operator is supposed to work (if I understand correctly) in this case, but I have this error message :
"! Paths don't touch; `&' will be changed to `..’."
Which I do not understand since the paths « touch ». There was a similar question last year, without a clear answer (« METAPOST subpath rounding issue »https://www.mail-archive.com/ntg-context@ntg.nl/msg94294.html).
A solution is to ignore the repeating points : newcircleA := circleA cutbefore P1 cutafter P2 -- (P2 -- P1) -- cycle ; but this new shape has 9 points instead of 7. The problem is that I do these operations a number of times, and the length of a path (in the number of points) is increasing and cause trouble when I look for intersections with others shapes.
Here is the MWE:
\startMPpage path circleA , circleB ; pair P[];
circleA := fullcircle scaled 1in randomized 3 ; circleB := fullcircle scaled 1in randomized 3 shifted(0.3in,0.3in) ;
draw circleA withcolor blue ; draw circleB withcolor red ;
P[1] := circleA intersectionpoint circleB ; dotlabel.lft("$P_1$",P[1]) ; dotlabel.rt("$\blue\tfx P_0^A$",point 0 of circleA) ; P[2] := reverse(circleA) intersectionpoint circleB ; dotlabel.rt("$P_2$",P[2]) ; dotlabel.rt("$\red\tfx P_0^B$",point 0 of circleB) ;
path newcircleA , newcircleB ; % newcircleA := circleA cutbefore P1 cutafter P2 & (P2 -- P1) & cycle ; % previous line gives an error : % "! Paths don't touch; `&' will be changed to `..'." newcircleA := circleA cutbefore P1 cutafter P2 -- (P2 -- P1) -- cycle ; newcircleA := newcircleA xshifted 2in ; draw newcircleA withcolor darkgreen ;
newcircleB := (circleB cutafter P1) -- (P1 -- P2) -- (circleB cutbefore P2 ) & cycle ; newcircleB := newcircleB xshifted 2in ; draw newcircleB withcolor black ; drawpoints newcircleA ; drawpointlabels newcircleA ;
\stopMPpage
I would appreciate any help ! Thanks ! 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 ___________________________________________________________________________________
___________________________________________________________________________________ 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 ___________________________________________________________________________________