Hi, I will try again. What if you do
newcircleA := newcircleA scrutinized 2; after your definition of newcircleA? /Mikael On Mon, Dec 20, 2021 at 3:45 PM Fabrice L <fabrice.al...@gmail.com> wrote: > > Thanks Mikael, > > Le 20 déc. 2021 à 02:21, Mikael Sundqvist via ntg-context > <ntg-context@ntg.nl> 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 > <ntg-context@ntg.nl> 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 > ___________________________________________________________________________________ > > ___________________________________________________________________________________ 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 ___________________________________________________________________________________