ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* MP: problem connecting paths.
@ 2021-12-20  4:30 Fabrice L via ntg-context
  2021-12-20  7:21 ` Mikael Sundqvist via ntg-context
  0 siblings, 1 reply; 5+ messages in thread
From: Fabrice L via ntg-context @ 2021-12-20  4:30 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: Fabrice L

[-- Attachment #1: Type: text/plain, Size: 2648 bytes --]

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


[-- Attachment #2: test.pdf --]
[-- Type: application/pdf, Size: 12968 bytes --]

[-- Attachment #3: Type: text/plain, Size: 54 bytes --]




I would appreciate any help ! Thanks ! 
Fabrice. 


[-- Attachment #4: Type: text/plain, Size: 493 bytes --]

___________________________________________________________________________________
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
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: MP: problem connecting paths.
  2021-12-20  4:30 MP: problem connecting paths Fabrice L via ntg-context
@ 2021-12-20  7:21 ` Mikael Sundqvist via ntg-context
  2021-12-20 14:45   ` Fabrice L via ntg-context
  0 siblings, 1 reply; 5+ messages in thread
From: Mikael Sundqvist via ntg-context @ 2021-12-20  7:21 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: Mikael Sundqvist

Hi,

would it be an option for you to do

newcircleA := circleA cutbefore P1 cutafter P2 -- cycle ;

In that case you avoid extra points.

/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
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: MP: problem connecting paths.
  2021-12-20  7:21 ` Mikael Sundqvist via ntg-context
@ 2021-12-20 14:45   ` Fabrice L via ntg-context
  2021-12-20 17:14     ` Mikael Sundqvist via ntg-context
  0 siblings, 1 reply; 5+ messages in thread
From: Fabrice L via ntg-context @ 2021-12-20 14:45 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: Fabrice L, Mikael Sundqvist


[-- Attachment #1.1: Type: text/plain, Size: 7071 bytes --]

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
> ___________________________________________________________________________________


[-- Attachment #1.2.1: Type: text/html, Size: 1210 bytes --]

[-- Attachment #1.2.2: test.pdf --]
[-- Type: application/pdf, Size: 14772 bytes --]

[-- Attachment #1.2.3: Type: text/html, Size: 9564 bytes --]

[-- Attachment #2: Type: text/plain, Size: 493 bytes --]

___________________________________________________________________________________
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
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: MP: problem connecting paths.
  2021-12-20 14:45   ` Fabrice L via ntg-context
@ 2021-12-20 17:14     ` Mikael Sundqvist via ntg-context
  2021-12-20 17:59       ` Fabrice L via ntg-context
  0 siblings, 1 reply; 5+ messages in thread
From: Mikael Sundqvist via ntg-context @ 2021-12-20 17:14 UTC (permalink / raw)
  To: Fabrice L; +Cc: Mikael Sundqvist, mailing list for ConTeXt users

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.alpha@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
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: MP: problem connecting paths.
  2021-12-20 17:14     ` Mikael Sundqvist via ntg-context
@ 2021-12-20 17:59       ` Fabrice L via ntg-context
  0 siblings, 0 replies; 5+ messages in thread
From: Fabrice L via ntg-context @ 2021-12-20 17:59 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: Fabrice L, Mikael Sundqvist

Dear Mikael,

> Le 20 déc. 2021 à 12:14, Mikael Sundqvist <mickep@gmail.com> a écrit :
> 
> Hi,
> 
> I will try again. What if you do
> 
> newcircleA := newcircleA scrutinized 2;
> 
> after your definition of newcircleA?

Once I understood I had to compile with LMTX, this works like magic ! I spent hours to find a solution… but here is a solution ! 
Thanks a lot ! 
> 
> /Mikael

Fabrice.
> 
> 
> On Mon, Dec 20, 2021 at 3:45 PM Fabrice L <fabrice.alpha@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
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-12-20 17:59 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-20  4:30 MP: problem connecting paths Fabrice L via ntg-context
2021-12-20  7:21 ` Mikael Sundqvist via ntg-context
2021-12-20 14:45   ` Fabrice L via ntg-context
2021-12-20 17:14     ` Mikael Sundqvist via ntg-context
2021-12-20 17:59       ` Fabrice L via ntg-context

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).