home *** CD-ROM | disk | FTP | other *** search
- #
- # Simple (and not so simple) 3D puzzles
- #
- # Gershon Elber, November 1994
- #
-
- #############################################################################
- # StickStar
- #
- sqrt2 = sqrt( 2 );
- eps = 0.015;
- rad = 0.3;
- len = (rad + eps) * 2;
- ItemAux1 = box(vector(-rad / sqrt2, -rad / sqrt2, -len),
- rad * 2 / sqrt2, rad * 2 / sqrt2, len * 2) * rz(45);
- ItemAux2 = (ItemAux1 * tx(rad) -
- ItemAux1 * rotx(90) * tz(rad + eps) -
- ItemAux1 * rotx(90) * tz(-rad - eps)) * tx(eps / 2);
- diag = len + eps;
- diagPoly = poly(list(vector( diag, diag, 0),
- vector(-diag, diag, 0),
- vector(-diag, 0, diag),
- vector( diag, 0, diag)),
- false);
- Item1 = ItemAux2 - diagPoly
- - diagPoly * sy(-1)
- - diagPoly * sz(-1)
- - diagPoly * sz(-1) * sy(-1);
- color(Item1, red);
-
- Item2 = Item1 * sx(-1);
- color(Item2, magenta);
-
- Item3 = Item1 * rx(90) * rz(90);
- color(Item3, green);
-
- Item4 = Item1 * rx(90) * rz(-90);
- color(Item4, yellow);
-
- Item5 = Item1 * rx(90) * ry(90);
- color(Item5, blue);
-
- Item6 = Item1 * rx(90) * ry(-90);
- color(Item6, cyan);
-
- AllItems = list(Item1, Item2, Item3, Item4, Item5, Item6);
- view(AllItems, on);
- save("stickstr", AllItems);
-
- #############################################################################
- # Sixbricks.
- #
- sqrt2 = sqrt( 2 );
- eps = 0.015;
- rad = 0.3;
- len = (rad * 2 + eps) * 2;
- ItemAux1 = box(vector(-rad / sqrt2, -rad / sqrt2, -len),
- rad * 2 / sqrt2, rad * 2 / sqrt2, len * 2) * rz(45);
- Item1 = (ItemAux1 * tx(rad) -
- ItemAux1 * rotx(90) * tz(rad + eps) -
- ItemAux1 * rotx(90) * tz(-rad - eps)) * tx(eps / 2);
- color(Item1, red);
-
- Item2 = Item1 * sx(-1);
- color(Item2, magenta);
-
- Item3 = Item1 * rx(90) * rz(90);
- color(Item3, green);
-
- Item4 = Item1 * rx(90) * rz(-90);
- color(Item4, yellow);
-
- Item5 = Item1 * rx(90) * ry(90);
- color(Item5, blue);
-
- Item6 = Item1 * rx(90) * ry(-90);
- color(Item6, cyan);
-
- AllItems = list(Item1, Item2, Item3, Item4, Item5, Item6);
- view(AllItems, on);
- save("sixbrick", AllItems);
-
- #############################################################################
- # Rounded StickStar (No (dis)assembly).
- #
- eps = 0.05;
- resolution = 40;
- rad = 0.3;
- len = (rad * 2 + eps) * 2;
- ItemAux1 = cylin(vector(0, 0, -len), vector(0, 0, len * 2), rad);
- ItemAux2 = ItemAux1 * tx(rad) -
- ItemAux1 * rotx(90) * sc(1 + eps) * tz(rad) -
- ItemAux1 * rotx(90) * sc(1 + eps) * tz(-rad);
- diag = len + eps;
- diagPoly = poly(list(vector( diag, diag, 0),
- vector(-diag, diag, 0),
- vector(-diag, 0, diag),
- vector( diag, 0, diag)),
- false);
- Item1 = ItemAux2 - diagPoly
- - diagPoly * sy(-1)
- - diagPoly * sz(-1)
- - diagPoly * sz(-1) * sy(-1);
- color(Item1, red);
-
- Item2 = Item1 * sx(-1);
- color(Item2, magenta);
-
- Item3 = Item1 * rx(90) * rz(90);
- color(Item3, green);
-
- Item4 = Item1 * rx(90) * rz(-90);
- color(Item4, yellow);
-
- Item5 = Item1 * rx(90) * ry(90);
- color(Item5, blue);
-
- Item6 = Item1 * rx(90) * ry(-90);
- color(Item6, cyan);
-
- AllItems = list(Item1, Item2, Item3, Item4, Item5, Item6);
- view(AllItems, on);
- save("stckstrr", AllItems);
-