/**
The fundamental equation of a slide rule on the C and D scales is:
distance1 = scale * log[n1/n0]
Where distance is the actual distance to mark a point with units of length
on a physical slide rule given an arbitrary dimensionless number n1 and a
"start point" dimensionless number n0 (which may be 1, or 1000 on large
circular slide rules.)
Scale is a scale with units of length, e.g. "scale = 10 inches" makes a
"10 inch slide rule" where a multiplicative scale of 10 from the start point
is 10 inches from the start point. This is interesting and gives an actual
physical scale to slide rules based on logarithms to base 10.
In log base 10 (log function):
distance1 === scale log[n1/n0]
n1 === n0 10^(distance1/scale)
scale = distance1 / log[n1/n0]
or, in natural log (ln function):
distance1 === scale ln[n1/n0] / ln[10]
n1 === n0 e^((distance1/scale) ln[10])
scale === distance1 ln[10] / ln[n1/n0]
WARNING: The equations below are not quite right.
For a circular slide rule, the radius probably should be written as an
Archimedan spiral:
See:
https://www.comsol.com/blogs/how-to-build-a-parameterized-archimedean-spiral-geometry/
radius = a + b theta
or
b = (radius2 - a) / (2 pi + theta1)
a === -2 b pi + radius2 + -1 b theta1
radius2 === a + 2 b pi + b theta1
theta1 === -1 a b^-1 + -2 pi + b^-1 radius2
or in [x, y] coordinates:
x = (a + b theta) cos[theta]
y = (a + b theta) sin[theta]
*/
p = new polyline
a = 1 inch
theta1 = 90 deg
radius2 = 2 cm
b = abs[(radius2 - a) / (2 pi + theta1)]
println["b is $b"]
for theta = 0 to 8 circle step 2 degree
{
x = (a + b theta) cos[theta]
y = (a + b theta) sin[theta]
p.addPoint[x,y]
}
p.show[]