Greetings All!

I was recently wanting to draw someline segments along radii
of a circle, at series of angles. Since I wanted to "think
in degrees", while the sin() and cos() functions work in
radians, I defined a function in pic according to:

.PS
pi = 4*atan2(1,1)
define d2r {$1*pi/180}
.PE

Then I wanted to plot the segments as follows:

.PS
r0 = 2 ; dr = 0.5
for i=1 to 5 do {
  t = d2r(15.0+0.5*i)
  line from (r0*cos(t),r0*sin(t)) to ((r0+dr)*cos(t),(r0+dr)*sin(t))
}
.PE

These came out in the wrong place! And I found out why. Look at:

.PS
pi = 4*atan2(1,1)
define d2r {$1*pi/180}
## Left-hand columne:
for i=1 to 5 do {
  t = d2r(15.0+0.5*i)
  sprintf("%g",t) at (0,1-i/5)
}
## Right-hand column:
for i=1 to 5 do {
  t = d2r((15.0+0.5*i))
  sprintf("%g",t) at (2,1-i/5)
}
.PE

which prints the values of d2r(15.0+0.5*i) in the left-hand column,
and the values of d2r((15.0+0.5*i)) in the right-hand column.

These are:

15.0087    0.270526
15.0175    0.279253
15.0262    0.287979
15.0349    0.296706
15.0436    0.305433

The right-hand column is correct (verified by independent software),
while the left-hand column has the values of 15+d2r(0.5*i) (again
similarly verified).

Thus when given the definition "define d2r {$1*pi/180}", pic evaluates
d2r(15.0+0.5*i) as 15 + d2r(0.5*i); in order to get it right I had
to bracket the expression "15.0+0.5*i" given as argument to d2r()
to make "(15.0+0.5*i)" be given as argument, which then came out right.

I can't think by what logic pic produces "15 + d2r(0.5*i)", but I'm
passing this on in case it is of use or interest to any of you!

Best wishes to all,
Ted.

-------------------------------------------------
E-Mail: (Ted Harding) <ted.hard...@wlandres.net>
Date: 02-Mar-2015  Time: 21:21:57
This message was sent by XFMail
-------------------------------------------------

Reply via email to