From 5ddc184e8b3f1d6fbd383409ceef0cdd0bf64f49 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Sat, 16 Apr 2022 16:42:23 +0800 Subject: [PATCH] refactor: use radians, degrees --- src/_impl/_archimedean_spiral_impl.scad | 29 +++++++++++++------------ 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/_impl/_archimedean_spiral_impl.scad b/src/_impl/_archimedean_spiral_impl.scad index 6ffddb9d..770fb872 100644 --- a/src/_impl/_archimedean_spiral_impl.scad +++ b/src/_impl/_archimedean_spiral_impl.scad @@ -1,25 +1,26 @@ -function _radian_step(b, theta, l) = - let( - r_square = (b * theta) ^ 2, - double_r_square = 2 * r_square - ) - acos((double_r_square - l ^ 2) / double_r_square) / 180 * PI; +use <../util/radians.scad>; +use <../util/degrees.scad>; -function _find_radians(b, point_distance, radians, n, count = 1) = - let(pre_radians = radians[count - 1]) - count == n ? radians : ( +function _radian_step(b, theta, dist) = + let(r_square = (b * theta) ^ 2) + radians(acos(1 - dist ^ 2 / (2 * r_square))); + +function _find_radians(b, point_distance, rads, n, count = 1) = + let(pre_rads = rads[count - 1]) + count == n ? rads : ( _find_radians( b, point_distance, - [each radians, pre_radians + _radian_step(b, pre_radians, point_distance)], + [each rads, pre_rads + _radian_step(b, pre_rads, point_distance)], n, - count + 1) + count + 1 + ) ); function _archimedean_spiral_impl(arm_distance, init_angle, point_distance, num_of_points, rt_dir) = - let(b = arm_distance / (2 * PI), init_radian = init_angle * PI / 180, sgn = rt_dir == "CT_CLK" ? 1 : -1) + let(b = arm_distance / (2 * PI), init_radian = radians(init_angle), sgn = rt_dir == "CT_CLK" ? 1 : -1) [ for(theta = _find_radians(b, point_distance, [init_radian], num_of_points)) - let(r = b * theta, a = sgn * theta * 57.2958) - [r * [cos(a), sin(a)], a] + let(r = b * theta, a = degrees(sgn * theta)) + [r * [cos(a), sin(a)], a] ]; \ No newline at end of file