chiark / gitweb /
knifeblock: CoverPegSlots
[reprap-play.git] / funcs.scad.cpp
index 0d589ac9ecd3fe89a9201ed2c0a8da0a5dcb0a36..7bcd414a46cddec1071a13cd48db6e2a8a6800c8 100644 (file)
@@ -1,20 +1,37 @@
 // -*- C -*-
 
-function dist(a,b) =
+function vecdiff2d(a,b) = [b[0]-a[0], b[1]-a[1]];
+function vecdiff(a,b)   = [b[0]-a[0], b[1]-a[1], b[2]-a[2]];
+
 #define dsq(i) (a[i]-b[i])*(a[i]-b[i])
-              sqrt(dsq(0) + dsq(1));
+function dist2d(a,b) = sqrt(dsq(0) + dsq(1));
+function dist(a,b)   = sqrt(dsq(0) + dsq(1) + dsq(2));
 #undef dsq
 
 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 d     (dist2d(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 tangents_intersect_beta(cbig,rbig,csmall,rsmall) =
+        tangent_intersect_beta(cbig,rbig-rsmall,csmall);
+
+function reflect_in_y(p) = [-p[0], p[1]];
+
+function angle_map_range(in,base) =
+  in <  base       ? in + 360 :
+  in >= base + 360 ? in - 360 :
+  in;