summaryrefslogtreecommitdiff
path: root/scad-gen.rb
diff options
context:
space:
mode:
Diffstat (limited to 'scad-gen.rb')
-rwxr-xr-xscad-gen.rb43
1 files changed, 43 insertions, 0 deletions
diff --git a/scad-gen.rb b/scad-gen.rb
new file mode 100755
index 0000000..96bb165
--- /dev/null
+++ b/scad-gen.rb
@@ -0,0 +1,43 @@
+#!/usr/bin/env ruby
+
+t = 0
+step = Math::PI / 10
+tmax = 2 * Math::PI
+
+def calc(t)[10 * Math.sin(t), 0, 10 * Math.cos(t)]
+end
+
+old_vec = calc(0)
+
+iter = 0;
+
+puts <<HEAD
+$fn=100;
+
+union() {
+ translate([#{old_vec.join(',')}])
+ sphere(d=1);
+
+HEAD
+
+while t < tmax do
+ t += step
+ new_vec = calc(t)
+ puts <<MAIN
+ length#{iter} = norm([#{new_vec[0] - old_vec[0]}, #{new_vec[1] - old_vec[1]}, #{new_vec[2] - old_vec[2]}]);
+ b#{iter} = acos(#{new_vec[2] - old_vec[2]} / length#{iter});
+ c#{iter} = atan2(#{new_vec[1] - old_vec[1]}, #{new_vec[0] - old_vec[0]});
+ translate([#{new_vec.join(', ')}])
+ sphere(d=1);
+ translate([#{old_vec.join(', ')}])
+ rotate([0, b#{iter}, c#{iter}])
+ cylinder(d=1, h=length#{iter});
+
+MAIN
+ iter += 1
+ old_vec = new_vec
+end
+
+puts <<TAIL
+}
+TAIL