X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=reprap-play.git;a=blobdiff_plain;f=funcs.scad.cpp;h=7bcd414a46cddec1071a13cd48db6e2a8a6800c8;hp=0d589ac9ecd3fe89a9201ed2c0a8da0a5dcb0a36;hb=4fb983b58d7e2ee412e69d768fe0d87ee22a3a45;hpb=3f431f5e5f72cc88127a70888575f9a18d2c871a diff --git a/funcs.scad.cpp b/funcs.scad.cpp index 0d589ac..7bcd414 100644 --- a/funcs.scad.cpp +++ b/funcs.scad.cpp @@ -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;