Hi, Consider following code: vardef polygon_with_side(expr n, s) = save a, b, r; numeric a, b, r; a * n = 360; a + 2b = 180; r = s * sind(b) / sind(a); for i = 0 upto n-1: (0, r) rotated (a * i) -- endfor cycle enddef; beginfig(1); path p; p = polygon_with_side(21, 20); draw p; endfig; bye; It draws a polygon with 21 sides with radius 20. I understand all of it except the for loop. What is (0, r) rotated (a *i) doing? -- Respect, Shiv Shankar Dayal
I think it works like (0, r) rotated (a) -- (0, r) rotated (a * 2) --
... (0, r) rotated (a*20) -- cycle
Is my understanding correct? Also, how can I label these vertices in a for loop?
On Wed, Aug 28, 2024 at 2:25 PM Shiv Shankar Dayal
Hi,
Consider following code:
vardef polygon_with_side(expr n, s) = save a, b, r; numeric a, b, r; a * n = 360; a + 2b = 180; r = s * sind(b) / sind(a); for i = 0 upto n-1: (0, r) rotated (a * i) -- endfor cycle enddef;
beginfig(1); path p; p = polygon_with_side(21, 20); draw p; endfig; bye;
It draws a polygon with 21 sides with radius 20. I understand all of it except the for loop.
What is (0, r) rotated (a *i) doing?
-- Respect, Shiv Shankar Dayal
-- Respect, Shiv Shankar Dayal
Hi,
I don't know where you found the code, but the answer to "What is (0,
r) rotated (a *i) doing?" is that it takes the point (0,r) and rotates
it a*i degrees.
For your labeling problem, see the last example of section 2.9 of
https://www.pragma-ade.com/general/manuals/metafun-p.pdf
/Mikael
PS Please do not cross post here and on stackexchange (at least not
without telling).
On Wed, Aug 28, 2024 at 11:12 AM Shiv Shankar Dayal
I think it works like (0, r) rotated (a) -- (0, r) rotated (a * 2) -- ... (0, r) rotated (a*20) -- cycle
Is my understanding correct? Also, how can I label these vertices in a for loop?
On Wed, Aug 28, 2024 at 2:25 PM Shiv Shankar Dayal
wrote: Hi,
Consider following code:
vardef polygon_with_side(expr n, s) = save a, b, r; numeric a, b, r; a * n = 360; a + 2b = 180; r = s * sind(b) / sind(a); for i = 0 upto n-1: (0, r) rotated (a * i) -- endfor cycle enddef;
beginfig(1); path p; p = polygon_with_side(21, 20); draw p; endfig; bye;
It draws a polygon with 21 sides with radius 20. I understand all of it except the for loop.
What is (0, r) rotated (a *i) doing?
-- Respect, Shiv Shankar Dayal
-- Respect, Shiv Shankar Dayal ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________
I don't know where you found the code, but the answer to "What is (0, r) rotated (a *i) doing?" is that it takes the point (0,r) and rotates it a*i degrees.
I do not understand the concept of rotating a point. It is rotated with respect to what reference?
For your labeling problem, see the last example of section 2.9 of
Thanks, I am reading that.
/Mikael
PS Please do not cross post here and on stackexchange (at least not without telling).
I will keep this in mind. -- Respect, Shiv Shankar Dayal
Shiv Shankar Dayal schrieb am 28.08.2024 um 12:23:
I don't know where you found the code, but the answer to "What is (0, r) rotated (a *i) doing?" is that it takes the point (0,r) and rotates it a*i degrees.
I do not understand the concept of rotating a point. It is rotated with respect to what reference?
You rotate around a point with the x and y coordinates 0. The blue dot shows the point with the coordinates 0. The green dot is rotated around this point. \starttext \startMPcode drawdot (0,0) withpen pencircle scaled 5mm withcolor blue; draw fullsquare scaled (4cm) withcolor red; \stopMPcode \startMPcode drawdot (0,0) withpen pencircle scaled 5mm withcolor blue; drawdot (1.5cm,0) withpen pencircle scaled 5mm withcolor green; draw fullsquare scaled (4cm) withcolor red; \stopMPcode \startMPcode drawdot (0,0) withpen pencircle scaled 5mm withcolor blue; drawdot (1.5cm,0) rotated (30) withpen pencircle scaled 5mm withcolor green; draw fullsquare scaled (4cm) withcolor red; \stopMPcode \startMPcode drawdot (0,0) withpen pencircle scaled 5mm withcolor blue; drawdot (1.5cm,0) rotated (60) withpen pencircle scaled 5mm withcolor green; draw fullsquare scaled (4cm) withcolor red; \stopMPcode \startMPcode drawdot (0,0) withpen pencircle scaled 5mm withcolor blue; drawdot (1.5cm,0) rotated (90) withpen pencircle scaled 5mm withcolor green; draw fullsquare scaled (4cm) withcolor red; \stopMPcode \stoptext Wolfgang
It is rotated with respect to the origin (that is (0,0)).
If you want to rotate around another point you have rotatedaround.
/Mikael
On Wed, Aug 28, 2024 at 12:27 PM Shiv Shankar Dayal
I don't know where you found the code, but the answer to "What is (0, r) rotated (a *i) doing?" is that it takes the point (0,r) and rotates it a*i degrees.
I do not understand the concept of rotating a point. It is rotated with respect to what reference?
For your labeling problem, see the last example of section 2.9 of
Thanks, I am reading that.
/Mikael
PS Please do not cross post here and on stackexchange (at least not without telling).
I will keep this in mind.
-- Respect, Shiv Shankar Dayal ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________
participants (3)
-
Mikael Sundqvist
-
Shiv Shankar Dayal
-
Wolfgang Schuster