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:
@@ -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),
|
||||
];
|
||||
|
Reference in New Issue
Block a user