1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-08-22 14:23:23 +02:00

support 3D triangles

This commit is contained in:
Justin Lin
2022-06-04 15:51:58 +08:00
parent 7356046aa7
commit 5cde164bb5

View File

@@ -14,7 +14,7 @@ function c3_a(r1, r2, r3) =
acos((b ^ 2 + c ^ 2 - a ^ 2) / (2 * b * c));
function pack_one(min_r, center, sinv, leng_cv, unit_cv, pre_leng, pre_r) =
function pack_one(min_r, center, v, sinv, leng_cv, unit_cv, pre_leng, pre_r) =
let(
r2 = r2(sinv, leng_cv, pre_leng),
leng = pre_leng + r2,
@@ -23,13 +23,13 @@ function pack_one(min_r, center, sinv, leng_cv, unit_cv, pre_leng, pre_r) =
r3 = c3_r(pre_r, r2),
a = c3_a(pre_r, r2, r3),
vta = unit_cv * (r3 + r2),
r3_ct1 = r2_ct + ptf_rotate(vta, a),
r3_ct2 = r2_ct + ptf_rotate(vta, -a)
r3_ct1 = r2_ct + ptf_rotate(vta, a, v),
r3_ct2 = r2_ct + ptf_rotate(vta, -a, v)
)
r2 > min_r ?
concat(
[[r2_ct, r2], if(r3 > min_r) each [[r3_ct1, r3], [r3_ct2, r3]]],
pack_one(min_r, center, sinv, leng_cv, unit_cv, r2 + leng, r2)
pack_one(min_r, center, v, sinv, leng_cv, unit_cv, r2 + leng, r2)
)
: [];
@@ -39,7 +39,9 @@ function tri_circle_packing(shape_pts, min_r) =
s1 = shape_pts[1] - shape_pts[0],
s2 = shape_pts[2] - shape_pts[1],
s3 = shape_pts[0] - shape_pts[2],
R = abs(cross(s1, s2)) / (norm(s1) + norm(s2) + norm(s3)),
cross_value = cross(s1, s2),
nv = is_num(cross_value) ? [0, 0, cross_value] : cross_value,
R = abs(norm(nv)) / (norm(s1) + norm(s2) + norm(s3)),
ca = center - shape_pts[0],
leng_ca = norm(ca),
@@ -58,8 +60,8 @@ function tri_circle_packing(shape_pts, min_r) =
)
[
[center, R],
each pack_one(min_r, center, sina, leng_ca, unit_ca, R, R),
each pack_one(min_r, center, sinb, leng_cb, unit_cb, R, R),
each pack_one(min_r, center, sinc, leng_cc, unit_cc, R, R),
each pack_one(min_r, center, nv, sina, leng_ca, unit_ca, R, R),
each pack_one(min_r, center, nv, sinb, leng_cb, unit_cb, R, R),
each pack_one(min_r, center, nv, sinc, leng_cc, unit_cc, R, R),
];