1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-04-14 11:11:55 +02:00

add shell

This commit is contained in:
Justin Lin 2021-09-18 12:21:03 +08:00
parent fbc07cec80
commit 702aab846e

View File

@ -2,47 +2,34 @@ use <experimental/tile_penrose3.scad>;
use <experimental/ptf_c2sphere.scad>;
use <ptf/ptf_rotate.scad>;
use <hull_polyline3d.scad>;
use <surface/sf_thickenT.scad>;
use <polyhedron_hull.scad>;
use <util/every.scad>;
radius = 10;
n = 5;
line_diameter = .5;
$fn = 3;
basket_radius = 40;
radius_in_plane = basket_radius / 1.25 / cos(36);
n = 4;
line_diameter = 2;
$fn = 4;
penrose_basket(radius, n, line_diameter);
penrose_basket(basket_radius, radius_in_plane, n, line_diameter);
module penrose_basket(radius, n, line_diameter) {
cos36 = cos(36);
sin36 = sin(36);
module penrose_basket(basket_radius, radius_in_plane, n, line_diameter) {
tris = tile_penrose3(n);
obtuse = [
[2 * cos36 ^ 2, 2 * cos36 * sin36],
[1, 0],
[0, 0]
];
acute = [
[4 * cos36 ^ 2 - 1, 0],
[2 * cos36 ^ 2, 2 * cos36 * sin36],
[1, 0]
];
tris = tile_penrose3(n, [
for(i = [0:4])
each [
["OBTUSE",
[for(p = obtuse) ptf_rotate(p, i * 72)]
],
["ACUTE",
[for(p = acute) ptf_rotate(p, i * 72)]
]
]
]);
r = radius * 2 * cos36;
for(t = tris) {
hull_polyline3d(
[for(p = t[1] * radius) ptf_c2sphere(p, r)],
line_diameter
);
if(every(t[1], function(p) norm(p * radius_in_plane) < radius_in_plane * 1.25)) {
pts = [for(p = t[1] * radius_in_plane) ptf_c2sphere(p, basket_radius)];
hull_polyline3d(
concat(pts, [pts[0]]),
line_diameter
);
inward_ratio = (basket_radius - 0.25 * line_diameter) / basket_radius;
outward_ratio = (basket_radius + 0.25 * line_diameter) / basket_radius;
polyhedron_hull(concat(pts * outward_ratio, pts * inward_ratio), polyhedron_abuse = true);
}
}
}