# SlideRule.frink

``` /**    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       n1 === n0 e^((distance1/scale) ln)       scale === distance1 ln / 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[]        ```