summaryrefslogtreecommitdiff
path: root/scad-gen.rb
blob: 96bb165c16f32550384fc458bd5eb4925aa17471 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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