chiark / gitweb /
commitid-layering-test: get commitid right way round
[reprap-play.git] / funcs.scad.cpp
1 // -*- C -*-
2
3 function vecdiff2d(a,b) = [b[0]-a[0], b[1]-a[1]];
4 function vecdiff(a,b)   = [b[0]-a[0], b[1]-a[1], b[2]-a[2]];
5
6 #define dsq(i) (a[i]-b[i])*(a[i]-b[i])
7 function dist2d(a,b) = sqrt(dsq(0) + dsq(1));
8 function dist(a,b)   = sqrt(dsq(0) + dsq(1) + dsq(2));
9 #undef dsq
10
11 function circle_point(c, r, alpha) = [ c[0] + r * cos(alpha),
12                                        c[1] + r * sin(alpha) ];
13
14 #define d     (dist2d(a,c))
15 #define alpha (atan2(a[1]-c[1],a[0]-c[0]))
16 #define gamma (asin(r / d))
17 #define beta  (alpha + 90 - gamma)
18
19 function tangent_intersect_beta(c,r,a) =
20               beta;
21
22 function tangent_intersect_b(c,r,a) =
23               circle_point(c, r, beta);
24 #undef d
25 #undef alpha
26 #undef gamma
27 #undef beta
28
29 function tangents_intersect_beta(cbig,rbig,csmall,rsmall) =
30         tangent_intersect_beta(cbig,rbig-rsmall,csmall);
31
32 function reflect_in_y(p) = [-p[0], p[1]];
33
34 function angle_map_range(in,base) =
35   in <  base       ? in + 360 :
36   in >= base + 360 ? in - 360 :
37   in;