ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Mikael Sundqvist via ntg-context <ntg-context@ntg.nl>
To: Fabrice L <fabrice.alpha@gmail.com>
Cc: Mikael Sundqvist <mickep@gmail.com>,
	mailing list for ConTeXt users <ntg-context@ntg.nl>
Subject: Re: MP: problem connecting paths.
Date: Mon, 20 Dec 2021 18:14:56 +0100	[thread overview]
Message-ID: <CAHy-LL-HEONWqN1L6BPhN-vVZhQjH+YgXTNgvO6AVYwJQ5Zs2A@mail.gmail.com> (raw)
In-Reply-To: <980A36CC-5A6A-4235-8D09-3A45C583BFA2@gmail.com>

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
___________________________________________________________________________________

  reply	other threads:[~2021-12-20 17:14 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-20  4:30 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 [this message]
2021-12-20 17:59       ` Fabrice L via ntg-context

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAHy-LL-HEONWqN1L6BPhN-vVZhQjH+YgXTNgvO6AVYwJQ5Zs2A@mail.gmail.com \
    --to=ntg-context@ntg.nl \
    --cc=fabrice.alpha@gmail.com \
    --cc=mickep@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).