chiark / gitweb /
wardrobe-hook: wip, elevation
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 15 Feb 2014 19:20:39 +0000 (19:20 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 15 Feb 2014 19:20:39 +0000 (19:20 +0000)
funcs.scad.cpp
wardrobe-hook.scad

index 0d589ac..29d5a1e 100644 (file)
@@ -8,13 +8,20 @@ function dist(a,b) =
 function circle_point(c, r, alpha) = [ c[0] + r * cos(alpha),
                                       c[1] + r * sin(alpha) ];
 
-function tangent_intersect(a,c,r) =
 #define d     (dist(a,c))
 #define alpha (atan2(a[1]-c[1],a[0]-c[0]))
 #define gamma (asin(r / d))
 #define beta  (alpha + 90 - gamma)
+
+function tangent_intersect_beta(c,r,a) =
+              beta;
+
+function tangent_intersect_b(c,r,a) =
               circle_point(c, r, beta);
 #undef d
 #undef alpha
 #undef gamma
 #undef beta
+
+function reflect_in_y(p) = [-p[0], p[1]];
+
index 7f29082..ecb1b12 100644 (file)
@@ -1,5 +1,7 @@
 // -*- C -*-
 
+include <funcs.scad>
+
 module FArcSegment_mask(beta) {
   for (i=[0 : 0.75 : 3]) {
     rotate(i*beta/4)
@@ -42,12 +44,12 @@ tuberad = tubewidth/2;
 bend = atan(tuberad/stemlen);
 mainoutrad = tuberad + mainthick;
 hookoutrad = hookinrad + hookwidth;
-hookcy = stemlen - hookoutrad;
+hookcy = -(stemlen - hookoutrad);
 
-eltopx = topwidth/2;
-eltopy = -tuberad + tubeheight + mainthick + 1;
-elmidx = topwidth/2;
-elmidy = -tuberad;
+eltop = [topwidth/2, -tuberad + tubeheight + mainthick + 1];
+elmid = [topwidth/2, -tuberad];
+ellow = tangent_intersect_b([0,hookcy], hookinrad, elmid);
+ellowextra = 180 - tangent_intersect_beta([0,hookcy], hookinrad, elmid);
 
 module Plan(){
   dy = tubeheight - tuberad*2;
@@ -59,12 +61,19 @@ module Plan(){
     square(center=false, size=[mainthick, stemlen/cos(bend)]);
 }
 
-module Elevation(){
-  FArcSegment(0, -hookcy, hookinrad, hookoutrad, 180, 90+hookcurl);
+module ElevationCore(){
+  FArcSegment(0, hookcy, hookinrad, hookoutrad,
+             180 - ellowextra,
+             90 + hookcurl);
   translate([-hookoutrad*sqrt(0.5), -(stemlen+10)]) mirror([1,0])
     square(center=false, size=[topwidth, stemlen + tubeheight + 20]);
+  polygon([[-hookoutrad, ellow[1]],
+          reflect_in_y(eltop),
+          eltop,
+          elmid,
+          ellow]);
 }
 
 Plan();
 translate([50,0])
-  Elevation();
+  ElevationCore();