mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-01-17 14:18:13 +01:00
add L_puzzle
This commit is contained in:
parent
ef60607f37
commit
840da32336
100
examples/L_puzzle.scad
Normal file
100
examples/L_puzzle.scad
Normal file
@ -0,0 +1,100 @@
|
||||
use <util/fibseq.scad>;
|
||||
|
||||
model = "ALL"; // [ALL, PIECE1, PIECE2]
|
||||
|
||||
level = 10;
|
||||
thickness = 1;
|
||||
thickness_step = true;
|
||||
p = 1.272;
|
||||
spacing = 0;
|
||||
|
||||
// n: 1 or 2
|
||||
module L_piece(n, thickness, p = 1.272, spacing = 0) {
|
||||
sides = [for(i = [0:5]) pow(p, n + i) - spacing];
|
||||
|
||||
linear_extrude(thickness)
|
||||
polygon([
|
||||
[0, 0],
|
||||
[sides[5], 0],
|
||||
[sides[5], sides[2]],
|
||||
[sides[3], sides[2]],
|
||||
[sides[3], sides[4]],
|
||||
[0, sides[4]],
|
||||
]);
|
||||
}
|
||||
|
||||
module L_puzzle(level, thickness, thickness_step = true, p = 1.272) {
|
||||
s4 = pow(p, 4);
|
||||
s5 = pow(p, 5);
|
||||
s6 = pow(p, 6);
|
||||
s7 = pow(p, 7);
|
||||
|
||||
module p1() {
|
||||
color(rands(0, 1, 3))
|
||||
L_piece(2, thickness);
|
||||
}
|
||||
|
||||
module p2() {
|
||||
offset1 = s7;
|
||||
offset2 = s4 + s6;
|
||||
|
||||
translate([0, offset1])
|
||||
rotate(-90) {
|
||||
p1();
|
||||
|
||||
translate([offset1, offset2])
|
||||
mirror([1, 0, 0])
|
||||
rotate(-90)
|
||||
color(rands(0, 1, 3))
|
||||
L_piece(1, thickness_step ? thickness * 2 : thickness);
|
||||
}
|
||||
}
|
||||
|
||||
fibs = fibseq(1, round(level / 2) + 1);
|
||||
|
||||
module _L_puzzle(level) {
|
||||
if(level == 1) {
|
||||
p1();
|
||||
}
|
||||
else if(level == 2) {
|
||||
p2();
|
||||
}
|
||||
else {
|
||||
nth = round(level / 2 - 1);
|
||||
|
||||
is_even = level % 2 == 0;
|
||||
|
||||
offset1 = is_even ?
|
||||
s5 * fibs[nth - 1] + s7 * fibs[nth] :
|
||||
s4 * fibs[nth - 1] + s6 * fibs[nth];
|
||||
|
||||
offset2 = is_even ?
|
||||
s4 * fibs[nth] + s6 * fibs[nth + 1] :
|
||||
s5 * fibs[nth - 1] + s7 * fibs[nth];
|
||||
|
||||
translate([0, offset1])
|
||||
rotate(-90) {
|
||||
scale([1, 1, thickness_step ? 1 + level * 0.05 : 1])
|
||||
_L_puzzle(level - 1);
|
||||
|
||||
translate([offset1, offset2])
|
||||
mirror([1, 0, 0])
|
||||
rotate(-90)
|
||||
scale([1, 1, thickness_step ? 1 + (level - 1) * 0.05 : 1])
|
||||
_L_puzzle(level - 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_L_puzzle(level);
|
||||
}
|
||||
|
||||
if(model == "ALL") {
|
||||
L_puzzle(level, thickness, thickness_step, p);
|
||||
}
|
||||
else if(model == "PIECE1") {
|
||||
L_piece(1, thickness, p, spacing);
|
||||
}
|
||||
else if(model == "PIECE2") {
|
||||
L_piece(2, thickness, p, spacing);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user