diff --git a/beziers.scad b/beziers.scad index 6ea3330..710f27f 100644 --- a/beziers.scad +++ b/beziers.scad @@ -154,7 +154,7 @@ function fillet3pts(p0, p1, p2, r, maxerr=0.1, w=0.5, dw=0.25) = let( v0 = normalize(p0-p1), v1 = normalize(p2-p1), midv = normalize((v0+v1)/2), - a = vector3d_angle(v0,v1), + a = vector_angle(v0,v1), tanr = min(r/tan(a/2), norm(p0-p1)*0.99, norm(p2-p1)*0.99), tp0 = p1+v0*tanr, tp1 = p1+v1*tanr, diff --git a/debug.scad b/debug.scad index dc9504a..6b489a9 100644 --- a/debug.scad +++ b/debug.scad @@ -123,7 +123,7 @@ module debug_faces(vertices, faces, size=1, disabled=false) { nrm0 = normalize(cross(dv0, dv1)); nrm1 = [0, 0, 1]; axis = normalize(cross(nrm0, nrm1)); - ang = vector3d_angle(nrm0, nrm1); + ang = vector_angle(nrm0, nrm1); theta = atan2(nrm0[1], nrm0[0]); translate(c) { rotate(a=180-ang, v=axis) { diff --git a/math.scad b/math.scad index ed34176..ad74dbb 100644 --- a/math.scad +++ b/math.scad @@ -568,6 +568,7 @@ function normalize(v) = v/norm(v); // Function: vector2d_angle() +// Status: DEPRECATED, use `vector_angle()` instead. // Usage: // vector2d_angle(v1,v2); // Description: @@ -575,9 +576,11 @@ function normalize(v) = v/norm(v); // Arguments: // v1 = First 2D vector. // v2 = Second 2D vector. -function vector2d_angle(v1,v2) = atan2(v1[1],v1[0]) - atan2(v2[1],v2[0]); +function vector2d_angle(v1,v2) = vector_angle(v1,v2); + // Function: vector3d_angle() +// Status: DEPRECATED, use `vector_angle()` instead. // Usage: // vector3d_angle(v1,v2); // Description: @@ -585,8 +588,19 @@ function vector2d_angle(v1,v2) = atan2(v1[1],v1[0]) - atan2(v2[1],v2[0]); // Arguments: // v1 = First 3D vector. // v2 = Second 3D vector. +function vector3d_angle(v1,v2) = vector_angle(v1,v2); + + +// Function: vector_angle() +// Usage: +// vector_angle(v1,v2); +// Description: +// Returns angle in degrees between two vectors of similar dimensions. +// Arguments: +// v1 = First vector. +// v2 = Second vector. // NOTE: constrain() corrects crazy FP rounding errors that exceed acos()'s domain. -function vector3d_angle(v1,v2) = acos(constrain((v1*v2)/(norm(v1)*norm(v2)), -1, 1)); +function vector_angle(v1,v2) = acos(constrain((v1*v2)/(norm(v1)*norm(v2)), -1, 1)); // Section: Coordinates Manipulation diff --git a/paths.scad b/paths.scad index 0390c8b..f665342 100644 --- a/paths.scad +++ b/paths.scad @@ -85,7 +85,7 @@ function simplify3d_path(path, eps=1e-6) = concat( ) let ( v1 = path[i] - path[i-1], v2 = path[i+1] - path[i-1] - ) if (vector3d_angle(v1,v2) > eps) path[i] + ) if (vector_angle(v1,v2) > eps) path[i] ], [path[len(path)-1]] ); @@ -165,7 +165,7 @@ function points_along_path3d( v2 = (n == end)? normalize(path[n]-path[n-1]) : normalize(path[n+1]-path[n]), crs = cross(v1, v2), axis = norm(crs) <= 0.001? [0, 0, 1] : crs, - ang = vector3d_angle(v1, v2), + ang = vector_angle(v1, v2), hang = ang * (n==0? 1.0 : 0.5), hrot = Quat(axis, hang), arot = Quat(axis, ang), @@ -376,7 +376,7 @@ module extrude_2dpath_along_3dpath(polyline, path, ang=0, convexity=10) { module extrude_2d_shapes_along_3dpath(path, convexity=10, clipsize=100) { function polyquats(path, q=Q_Ident(), v=[0,0,1], i=0) = let( v2 = path[i+1] - path[i], - ang = vector3d_angle(v,v2), + ang = vector_angle(v,v2), axis = ang>0.001? normalize(cross(v,v2)) : [0,0,1], newq = Q_Mul(Quat(axis, ang), q), dist = norm(v2) diff --git a/transforms.scad b/transforms.scad index 7aff07e..e29853d 100644 --- a/transforms.scad +++ b/transforms.scad @@ -289,7 +289,7 @@ module rot(a=0, v=undef, cp=undef, from=undef, to=undef, reverse=false) V_RIGHT ); axis = normalize(cross(vv1, vv3)); - ang = vector3d_angle(vv1, vv2); + ang = vector_angle(vv1, vv2); if (reverse) { rotate(a=-ang, v=axis) rotate(a=-a, v=vv1) children(); } else {