Metafun: how to draw a straight line past the end points
Hi, I have a silly question: given two points in the plane z1 = (1cm,3cm) ; z2 = (5cm, 9cm) ; the command draw z1 -- z2 withpen pencircle scaled .5pt ; draws the line segment joining z1 and z2. How could I draw the line segment which goes a little further (say 1cm) than both the end points of this segment (that is in this example, a point before z1 and a point after z2 on the straight line) . Indeed it is possible to write the equation of the line and then compute by hand the coordinates of the new end points, but I think there is a simpler way in Metafun to do this. Thanks for any help: Otared
Hi,
Le 9 déc. 2020 à 10:57, Otared Kavian
a écrit : Hi,
I have a silly question: given two points in the plane z1 = (1cm,3cm) ; z2 = (5cm, 9cm) ; the command draw z1 -- z2 withpen pencircle scaled .5pt ; draws the line segment joining z1 and z2. How could I draw the line segment which goes a little further (say 1cm) than both the end points of this segment (that is in this example, a point before z1 and a point after z2 on the straight line) . Indeed it is possible to write the equation of the line and then compute by hand the coordinates of the new end points, but I think there is a simpler way in Metafun to do this.
The shortened operation is the solution ! See MetaFun manual section 1.18 \starttext \startMPpage z1 = (1cm,3cm) ; z2 = (5cm, 9cm) ; draw (z1--z2) shortened -1cm withcolor blue ; draw (z1--z2) withcolor red ; \stopMPpage \stoptext Fabrice.
Thanks for any help: Otared
___________________________________________________________________________________ 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 ___________________________________________________________________________________
Hi Fabrice, Thanks a lot ! Indeed that does the job, which shows how wonderful Metafun is ! Best regards: Otared
On 9 Dec 2020, at 17:19, Fabrice L
wrote: Hi,
Le 9 déc. 2020 à 10:57, Otared Kavian
a écrit : Hi,
I have a silly question: given two points in the plane z1 = (1cm,3cm) ; z2 = (5cm, 9cm) ; the command draw z1 -- z2 withpen pencircle scaled .5pt ; draws the line segment joining z1 and z2. How could I draw the line segment which goes a little further (say 1cm) than both the end points of this segment (that is in this example, a point before z1 and a point after z2 on the straight line) . Indeed it is possible to write the equation of the line and then compute by hand the coordinates of the new end points, but I think there is a simpler way in Metafun to do this.
The shortened operation is the solution ! See MetaFun manual section 1.18
\starttext \startMPpage z1 = (1cm,3cm) ; z2 = (5cm, 9cm) ; draw (z1--z2) shortened -1cm withcolor blue ; draw (z1--z2) withcolor red ;
\stopMPpage \stoptext
Fabrice.
Thanks for any help: Otared
___________________________________________________________________________________ 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 ___________________________________________________________________________________
On Wed, 9 Dec 2020, Otared Kavian wrote:
Thanks a lot ! Indeed that does the job, which shows how wonderful Metafun is !
Or, if you want to use high school algebra: \starttext \startMPcode z1 = (1cm,3cm) ; z2 = (5cm, 9cm) ; z3 = 1cm * dir(angle (z2 - z1)) shifted z2; draw z1 -- z3 ; draw z1 -- z2 withcolor red; \stopMPcode \stoptext Aditya
Hi Aditya, Thanks for the alternative method, which comes handy if one wishes to extend the straight line by a different amount at either end: \starttext \startMPcode z1 = (1cm,3cm) ; z2 = (5cm, 9cm) ; z3 = 1cm * dir(angle (z2 - z1)) shifted z2 ; z4 = -.5cm*dir(angle(z2 - z1)) shifted z1 ; draw z1 -- z3 ; draw z4 -- z1 ; draw z1 -- z2 withcolor red ; \stopMPcode \stoptext Best regards: Otared
On 9 Dec 2020, at 18:37, Aditya Mahajan
wrote: On Wed, 9 Dec 2020, Otared Kavian wrote:
Thanks a lot ! Indeed that does the job, which shows how wonderful Metafun is !
Or, if you want to use high school algebra:
\starttext \startMPcode z1 = (1cm,3cm) ; z2 = (5cm, 9cm) ; z3 = 1cm * dir(angle (z2 - z1)) shifted z2; draw z1 -- z3 ; draw z1 -- z2 withcolor red; \stopMPcode \stoptext
Aditya ___________________________________________________________________________________ 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 ___________________________________________________________________________________
On Wed, 9 Dec 2020, Otared Kavian wrote:
Hi Aditya,
Thanks for the alternative method, which comes handy if one wishes to extend the straight line by a different amount at either end:
\starttext \startMPcode z1 = (1cm,3cm) ; z2 = (5cm, 9cm) ; z3 = 1cm * dir(angle (z2 - z1)) shifted z2 ; z4 = -.5cm*dir(angle(z2 - z1)) shifted z1 ; draw z1 -- z3 ; draw z4 -- z1 ; draw z1 -- z2 withcolor red ; \stopMPcode \stoptext
Or just redefine shortened to accept a pair! \startMPdefinitions primarydef p shortened d = reverse ( ( reverse (p enlonged -xpart paired(d)) ) enlonged -ypart paired(d) ) enddef ; \stopMPdefinitions \starttext \startMPpage z1 = (1cm,3cm) ; z2 = (5cm, 9cm) ; draw (z1--z2) shortened (-1cm,-2cm) withcolor blue ; draw (z1--z2) withcolor red ; \stopMPpage \stoptext Now that if you really want to shorten a path, then cutends works better than shortened \startMPdefinitions primarydef p shortened d = reverse ( ( reverse (p enlonged -xpart paired(d)) ) enlonged -ypart paired(d) ) enddef ; \stopMPdefinitions \starttext \startMPpage z1 = (1cm,3cm) ; z2 = (5cm, 9cm) ; path p, q; p := z1 {up} .. {right} z2; q := p shifted (6cm, 0); draw p withcolor red ; draw p shortened (1cm,2cm) withcolor blue ; draw q withcolor green ; draw q cutends (1cm,2cm) withcolor blue ; \stopMPpage \stoptext Aditya
Thanks Aditya! One can learn a lot with your answers ! In the Metafun manual I see enlonged but I did not know to use it. Best regards: Otared
On 9 Dec 2020, at 21:38, Aditya Mahajan
wrote: On Wed, 9 Dec 2020, Otared Kavian wrote:
Hi Aditya,
Thanks for the alternative method, which comes handy if one wishes to extend the straight line by a different amount at either end:
\starttext \startMPcode z1 = (1cm,3cm) ; z2 = (5cm, 9cm) ; z3 = 1cm * dir(angle (z2 - z1)) shifted z2 ; z4 = -.5cm*dir(angle(z2 - z1)) shifted z1 ; draw z1 -- z3 ; draw z4 -- z1 ; draw z1 -- z2 withcolor red ; \stopMPcode \stoptext
Or just redefine shortened to accept a pair!
\startMPdefinitions primarydef p shortened d = reverse ( ( reverse (p enlonged -xpart paired(d)) ) enlonged -ypart paired(d) ) enddef ; \stopMPdefinitions
\starttext \startMPpage z1 = (1cm,3cm) ; z2 = (5cm, 9cm) ; draw (z1--z2) shortened (-1cm,-2cm) withcolor blue ; draw (z1--z2) withcolor red ;
\stopMPpage \stoptext
Now that if you really want to shorten a path, then cutends works better than shortened
\startMPdefinitions primarydef p shortened d = reverse ( ( reverse (p enlonged -xpart paired(d)) ) enlonged -ypart paired(d) ) enddef ; \stopMPdefinitions
\starttext \startMPpage z1 = (1cm,3cm) ; z2 = (5cm, 9cm) ; path p, q; p := z1 {up} .. {right} z2; q := p shifted (6cm, 0);
draw p withcolor red ; draw p shortened (1cm,2cm) withcolor blue ;
draw q withcolor green ; draw q cutends (1cm,2cm) withcolor blue ;
\stopMPpage \stoptext
Aditya ___________________________________________________________________________________ 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 ___________________________________________________________________________________
On 12/9/2020 9:38 PM, Aditya Mahajan wrote:
Or just redefine shortened to accept a pair!
\startMPdefinitions primarydef p shortened d = reverse ( ( reverse (p enlonged -xpart paired(d)) ) enlonged -ypart paired(d) ) enddef ; \stopMPdefinitions
patched but then also: primarydef p enlonged len = begingroup if len == 0 : p elseif pair p : ... in order to save some energy when one is zero Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
participants (4)
-
Aditya Mahajan
-
Fabrice L
-
Hans Hagen
-
Otared Kavian