diff --git a/scad/base/smoothing.scad b/scad/base/smoothing.scad new file mode 100644 index 0000000..0b673d9 --- /dev/null +++ b/scad/base/smoothing.scad @@ -0,0 +1,18 @@ +//smoothing smooths a corner, spanned by v1, v2 and v3 with radius r +module smoothing(v1, v2, v3, r, th = 0){ + n1 = (v1-v2)/norm(v1-v2); + n2 = (v3-v2)/norm(v3-v2); + alpha = acos(n1*n2)/2; + n3 = (n1+n2)/norm(n1+n2); + + centre = v2+n3*(r/sin(alpha)); + l = r*sqrt((1/sin(alpha)^2)-1); + + translate(th*n3){ + difference(){ + polygon([v2+l*n1,v2,v2+l*n2]); + translate(centre) + circle(r = r, $fn = 64); + } + } +} \ No newline at end of file diff --git a/scad/catears.scad b/scad/catears.scad index db2c892..0506f39 100644 --- a/scad/catears.scad +++ b/scad/catears.scad @@ -1,14 +1,16 @@ use ; use ; +use ; thickness = 2.7; height = 5.5; epsilon = 0.001; //needs to be small but greater 0 so that the model doesn't break +smoothing = true; module catear(){ ctrl_ear1 = [[49,96],[58,112],[63,137],[61.5,141]]; - ctrl_ear2 = [[61.5+1.5*epsilon,141-4*epsilon],[60,145],[42.5,140.5],[18,123]]; + ctrl_ear2 = [[61.5+1.5*epsilon,141-4*epsilon],[60,145],[42.5,140.5],[18,123]]; shape_band = [[thickness/2,height/2-0.4], [thickness/2,-height/2+0.4], @@ -21,6 +23,34 @@ module catear(){ bezier_extrude(ctrl = ctrl_ear1, shape = shape_band, sections = 32); bezier_extrude(ctrl = ctrl_ear2, shape = shape_band, sections = 32); + + //smoothing the corners between ears and headband + if(smoothing){ + + //these values are approximations to intersections and tangents + c1 = [18.3,123.21]; + v1 = [18.33,123.2]; + v2 = [18.35,123.25]; + v3 = [18.27,123.22]; + + c2 = [48.75,95.56]; + v4 = [48.85,95.35]; + v5 = [49,96]; + v6 = [48.65,95.8]; + + k = 4; //pick k such that 0.4/k < layer height + + for(i = [0 : k]){ + linear_extrude(height-i*0.8/k, center = true, convexity = 10){ + smoothing(v1,c1,v2,r=2.5,th=thickness/2-(k-i)*0.4/k); + smoothing(v2,c1,v3,r=4,th=thickness/2-(k-i)*0.4/k); + smoothing(v4,c2,v5,r=4,th=thickness/2-(k-i)*0.4/k); + smoothing(v5,c2,v6,r=2.5,th=thickness/2-(k-i)*0.4/k); + } + } + + } + } module catears(){ diff --git a/stl/catears.stl b/stl/catears.stl index 45e7b99..0217aca 100644 Binary files a/stl/catears.stl and b/stl/catears.stl differ