/** 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[]