mead-horn: add twist and x/y scaling
[clinton/3d-models.git] / mead-horn / mead-horn.scad
CommitLineData
09d3555a
CE
1// 2021
2
3// Single person mead horn, for winter solstice 2021 since sharing
4// mead from the real horn is probably still unsafe.
5
09d3555a 6use <dotscad/shape_circle.scad>;
09d3555a
CE
7use <dotscad/helix_extrude.scad>;
8
9bottom_radius = 4;
4c544e53 10top_radius = 33;
09d3555a 11horn_length = 135;
4c544e53
CE
12horn_rise = 40;
13horn_twist = 0;
14horn_aspect = [ 0.92, 1.0 ];
09d3555a
CE
15
16module helix_horn () {
17 helix_levels = 1/6;
18
4c544e53 19 arc_measure = (360 * helix_levels) * (3.13 / 180);
09d3555a 20 arc_length = horn_length;
09d3555a 21 helix_radius = (arc_length / arc_measure);
09d3555a 22
4c544e53
CE
23 // Round off end
24 // todo: dotscad rounded cone instead?
25 translate ([helix_radius, 0, 0]) scale ([horn_aspect[0], 1/2, horn_aspect[1]]) intersection () {
09d3555a
CE
26 sphere (r = bottom_radius);
27 rotate ([90, 0, 0]) cylinder (h = bottom_radius, r = bottom_radius, center=false);
28 }
4c544e53
CE
29
30 shape_pts = [ for (pts = shape_circle (radius = bottom_radius)) [ pts[0] * horn_aspect[0], pts[1] * horn_aspect[1] ] ];
31
09d3555a
CE
32 helix_extrude(shape_pts,
33 radius = helix_radius,
34 scale = top_radius/bottom_radius,
35 levels = helix_levels,
4c544e53
CE
36 level_dist = horn_rise / helix_levels,
37 vt_dir = "SPI_UP",
38 twist = horn_twist / helix_levels
09d3555a
CE
39 );
40}
41
4c544e53 42helix_horn ($fs = 0.1, $fa = 1);