Welcome to MakerHome




We've completed our yearlong print-a-day project!
All new material is now at Hacktastic: www.mathgrrl.com


Wednesday, June 18, 2014

Day 296 - Spiral conformation of 7_6

The penultimate knot in our series is the knot 7_6, in both standard conformation and the spiral S(5,2,(1,1,-1,1)) conformation from Day 234.


Thingiverse link: http://www.thingiverse.com/make:82547

Settings: Makerbot Replicator 2 on .3mm/low with custom knot slicing settings. The knot requires almost no support material if you print it end-up instead of flat on its side.

Technical notes, spiral flavor: It isn't known whether or not all knots have a spiral representation. As of the time of this blog post we know that eight of the fifteen knots through seven crossings are spiral. The spiral notation S(n,k,(....)) denotes that the knot can be represented as an n-strand braid periodic knot with k repetitions and over/under spiral pattern determined by the vector in parentheses.
  • 3_1 is a torus knot so has two spiral representations: S(2,3,(1)) and S(3,2,(1,1))
  • 4_1 has spiral representation S(3,2,(1,1))
  • 5_1 is a torus knot so has two spiral representations: S(2,5,(1)) and S(5,2,(1,1,1,1))
  • 6_2 has spiral representation S(5,2,(1,1,1,-1))
  • 6_3 has spiral representation S(5,2,(1,1,-1,-1))
  • 7_1 is a torus knot so has two spiral representations: S(2,7,(1)) and S(7,2,(1,1,1,1,1,1))
  • 7_6 has spiral representation S(5,2,(1,1,-1,1))
  • 7_7 has spiral representation S(5,2,(1,-1,-1,1))

Tuesday, June 17, 2014

Day 295 - Tangle conformation of 7_5

Just three knots left in the conformation series that we started on Day 266! Today we have the knot 7_5 in a tangle conformation, where you can clearly see the Conway notation [322] for this knot; note the one three-twist and two two-twists in the red model on the right:


Thingiverse link: http://www.thingiverse.com/make:82546

Settings: MakerBot Replicator 2 with our usual custom knot slicer settings.

Technical notes, KnotPlot flavor: This knot was made by JMU student Greg Houchins using KnotPlot. Here is what he has to say about his design process:

A particularly visual way to make a printable tangle-based knot  is with KnotPlot's Rational Tangle Applet that gives you one rational tangle to twist on the top, bottom, left, or right in any direction.  This provides a way to visualize the physical construction of the knot but is limited by its inability to follow Conway notation directly.  To make specific knots given their Conway notation, it is easier to use KnotPlot's Rational Tangle Calculator. This calculator includes the ability to make, transform and adjoin all the tangles need to follow the usual tangle construction algorithm. 


To make the 7_5 model (with Conway notation [322]), open the KnotPlot Tangle Calculator and click on the number 3 to create the tangle with 3 clockwise rations.  Then transform the knot with the r button and press the number 2 button to form the tangle with two clockwise rotations.  To adjoin them, press the # button. Then transform them again with the r button, make another tangle with 2 rotations, and adjoin them with #. To finalize the knot, press the N button to make the numerator knot, which is what we want.  One this knot is formed, we can export it as an .obj file by going to the KnotPlot command line and typing objout 7_5knot (where "7_5knot" is the title of the file it will create).

Monday, June 16, 2014

Day 294 - Secret push-pin shelf

One more push-pin print; this time we took another design by Tosh on Thingiverse, his Secret Shelf, and scaled it down for use on the corkboard. Our first attempt was a reduction to 60% scale, shown on the left in orange; this is the bottom of the shelf but we are using it upside-down since it was too small to have a proper lid (it would have crashed into the push-pins). The second attempt is shown on the right with a dollar hiding inside, at 80% scale.


Thingiverse link: http://www.thingiverse.com/make:82541

Settings: Printed on a Replicator 2 with .3mm/low layer resolution and at 60% and 80% scales.

Sunday, June 15, 2014

Day 293 - Push-pin push-pin-less holder

Today we printed a push-pin-less push-pin, for those times that you don't want to leave a hole in your object; the design is Tosh's beautifully simple Wall mount paper clip from Thingiverse.


Thingiverse link: http://www.thingiverse.com/make:82539

Settings: Replicator 2 on .3mm/low, printed with the object on its side so that supports are not needed. The push-pin hole came out well even in that orientation.

Technical notes, Father's Day edition: Happy Father's Day everyone! To celebrate we took Phil out to a mountain cabin for some analog relaxation time. Sort of the opposite of what we'll experience when we move to NYC next week. Here is what it looked and sounded like at dawn, with the sun just coming up over the beautiful Shenandoah Valley mountains:


Saturday, June 14, 2014

Day 292 - Push-pin push-pin holder

Today is Saturday and we are printing things for young C, who needs things for his corkboard. First, a push-pin holder that is held up by push-pins, JamieLaing's Thumbtack-able Thumbtack Holder from Thingiverse:


Thingiverse link: http://www.thingiverse.com/make:82538

Settings: The usual .3mm/low layer height with a Replicator 2. The thumbtack holes came out just the right size and the model is quite sturdy.

Friday, June 13, 2014

Day 291 - Friday Fail: Crossing change edition, with Pretzel conformation of 7_4

The most eagle-eyed of you may have noticed an error in one of the knots in the group photo of the knot conformations series on Day 266. We got one of the crossings wrong in 7_4!


Specifically, we accidentally made a print of P(-3,1,-3) - that is, three negative twists on the left, one positive twist in the center, and three negative twists on the right - when we needed a print of P(-3,-1,-3). Since we reversed the crossing in the middle we made a knot that can be moved into a projection with fewer than seven crossings. If the knot were made of rubber, we could grab the overstrand of the center crossing and stretch it out around the outside of the knot, eliminating three crossings. This means that the knot we printed has a crossing number of at most four, so must either be 4_1, 3_1, or the unknot. Bonus question: Can you tell which?

Here is the fixed version, although to confuse you we decided to swap all of the *other* crossings instead of changing the center one. In other words, we printed the pretzel knot P(3,1,3), which is still a conformation of the knot 7_4.


Thingiverse link: http://www.thingiverse.com/make:82536

Settings: MakerWare .3mm/low on a Replicator 2 with custom knot slicing profile.

Technical notes, math flavor: This knot was made by JMU students Greg Houchins and Kirill Korsak, who used Mathematica's KnotData package to export an STL file of this pretzel conformation. How did they know this pretzel knot is 7_4? Because they computed its knot determinant and the answer was 15. Since the pretzel knot above is in a projection with 7 crossings, we know that its crossing number is at most 7, and therefore that it is one of the first fifteen knots in the Rolfsen table. Only one of those knots has determinant 15, and that is 7_4. Below is a handy table of determinants for the knots through 7 crossings, generated by the amazing KnotInfo site.

Thursday, June 12, 2014

Day 290 - Cantarella conformation of 7_3

Today's knot conformation takes us back to the beginning of my 3D-printing journey in February 2013, when I got my first 3D printer - still my favorite - a MakerBot Replicator 2. (Sad note: I think this fantastic printer has been discontinued, as it is consistently out of stock on the MakerBot site. Too bad, because this is the best 3D printer I have ever had the pleasure of using. I have one at home, one in the JMU MakerLab, two in the JMU 3-SPACE Classroom, and I wanted to get some of them for MoMath when I start there this fall.)

Back in early 2013 my entire motivation for getting a 3D printer was to print knots, since that is what I usually study when I am wearing my math professor hat. Specifically, I wanted to print knots in a minimum conformation, that is, knots that were as tight as possible. Of course it is difficult to see what tight knots are doing since they are all bunched up, so many of my early prints of tight knots were "blown out" - really meaning that the strands were made thinner - so that there would be space between the strands; for example see Day 9 and Day 11. Today's conformation of 7_3 is a true "tight" conformation, pulled together as closely as possible. The data for this knot was kindly provided by Jason Cantarella from the Department of Mathematics at the University of Georgia, also known as DesignByNumbers on Thingiverse, where he has provided files for a very large number of minimum-conformation knots and links.


Thingiverse link: http://www.thingiverse.com/make:82272

Settings: Printed on a MAKERBOT REPLICATOR 2 I LOVE YOU PLEASE DO NOT BE DISCONTINUED.

Wednesday, June 11, 2014

Day 289 - Braid representation of 7_2

Continuing with the knot conformations series we started on Day 266, today we printed a braid representation of the knot 7_2.


Thingiverse link: http://www.thingiverse.com/make:82269

Settings: Printed on a Replicator 2 with our custom knot support profile.

Technical notes, Mathematica/Blender/Tinkercad flavor: This knot was printed by JMU student Patrick Moran, using Mathematica to get the original braid shape, Blender to thicken the strands, and Tinkercad to add bars at the top and bottom of the model. Here is what he has to say about his process:

For the knot 7_6 I decided to show a simple braid representation, where the crossings occur between adjacent strands in a series of strands that we imagine as connecting up at the ends (that is, the first strand at the top bar is connected to the first strand on the bottom bar, and so on). Every knot has such a braid representation; see Colin Adams' Knot Book for a nice proof of this. To get a 3D model of the braid representation I used Mathematica, with commands as shown in this screenshot:


After exporting we used the Blender-thickening method from Day 285 to thicken the strands, and added bars to the top and bottom using Tinkercad.


Tuesday, June 10, 2014

Day 288 - Micron Bach

One of the things I had to give up to move from a house in the country to an apartment in Brooklyn was my drum set. Apparently you have neighbors and stuff when you live in an apartment building, and not all of them appreciate loud banging noises. In the hopes that I'll find time to turn my musical attentions to learning how to use our Alesis Micron synthesizer, today I printed a little Bach bust to sit on the Micron, from ad1124's very nice bach_final Digitizer-scanned model on Thingiverse:


Thingiverse link: http://www.thingiverse.com/make:82268

Settings: Printed on a MakerBot Replicator 2 with MakerWare .2mm/standard; that's better resolution than I usually use, but I wanted to make sure to capture the details of the model.

Monday, June 9, 2014

Day 287 - Grocery bag holders

In preparation for walking groceries home from the shop in the big city, today we printed three of ivanseidel's Bag Holder model on Thingiverse (one for each of us in the family). There are a number of bag holders on Thingiverse but the design of this one is particularly sturdy and elegant, with large comfortable handles. I think they look like elephants somehow. Try making one and having people guess what it is. So far none of the people I have asked have been able to figure it out on their own, although they come up with a lot of strange and interesting guesses!


Thingiverse link: http://www.thingiverse.com/make:82266

Settings: MakerWare .3mm/low with no raft and no supports. The print is quick and light despite looking rather large.

Sunday, June 8, 2014

Day 286 - Torus conformations of 7_1

Today we have two torus knot conformations of 7_1. A torus knot is one that can be drawn on the surface of torus ("inner tube" shape) without intersecting itself. A T(p,q) torus knot wraps around the torus like a clock p times, and around the handle of the torus q times. The standard conformation of 7_1 in the knot table is shown on the left, in the form of a T(2,7) torus knot. The blue conformation on the right is the same knot but in the T(7,2) torus knot conformation.


Thingiverse link: http://www.thingiverse.com/make:82264

Settings: Printed on a MakerBot Replicator 2 with our custom knot slicing settings to minimize supports. Printing the knot on its side results in far, far less support material than printing knot horizontally.

Technical notes, OpenSCAD flavor: This knot was printed by JMU student Taylor Meador, who used a modified version of the OpenSCAD code for our trefoil torus knot models from Day 150 (thanks as always to kitwallace).

$fn=24;

/*
// trefoil as the torus knot T(7,2)
// http://mathworld.wolfram.com/Torus.html
// take parameterization of torus (u,v)->R^3
// and let u=2t, v=3t
// scaled to 40mm before tubifying
function f(t) =
[ 3.9*(3+1.6*cos(7*t))*cos(2*t),
3.9*(3+1.6*cos(7*t))*sin(2*t),
3.9*(1.6*sin(7*t))
];
// create the knot with given radius and step
tubify(1.6, 1, 360);
*/

module tubify(r, step, end) {
for (t=[0: step: end+step]) {
hull() {
translate(f(t)) sphere(r);
translate(f(t+step)) sphere(r);
}
};

Saturday, June 7, 2014

Day 285 - Seifert surface of 6_3

Today we continue with the knot conformations collection that we started on Day 266. (See also Day 267, Day 268, Day 269, Day 272, Day 273, Day 275, and Day 276.) Today's knot is 6_3. Along with the usual conformation of 6_3 we printed a confirmation with a Seifert surface. A Seifert surface is a surface whose boundary is the knot, so if you trace along the edge of the red model you will trace out a conformation of the knot 6_3.


Thingiverse link: http://www.thingiverse.com/make:82226

Settings: Printed on a Replicator 2 with the model on its side, to minimize supports.

Technical notes, math flavor: This knot was made by Jonathan Gerhard, who has this to say about the math behind his model: A Seifert surface of a knot is an orientable, simply connected surface with a knot as its boundary. There are infinitely many different Seifert surfaces for any given knot. This particular example is a “Ribbon” configuration of a surface with the 6_3 knot as its boundary. An algorithm to create such a surface from any knot was first given by Herbert Seifert in 1934, and since then many different knot invariants, things that don’t change no matter how the knot is represented, have been found in relation to these surfaces.

Technical notes, SeifertView/Blender flavor: To make the Seifert surface model, Jonathan used the wonderful program SeifertView, created by Jack van Wijk from the Department of Mathematics and Computer Science of Eindhoven University of Technology. The freely-available version of SeifertView does not include an STL exporter, but Dr. van Wijk was kind enough to send Jonathan a special copy of the program that would allow STL export for this project. After exporting from SeifertView, Jonathan did some post-processing in Blender to thicken the surface. Here is his walkthrough of what he did to make today's model:

To begin with, you need to download a special version of SeifertView that allows exporting. It’s not currently online, so if you need it, contact me at gerha2jm@dukes.jmu.edu. On the right-hand side of the SeifertView window there is a menu in which you can click on 6_3. Then on the bottom there will be an option to change it into a Ribbon surface and an option to Smooth the surface. Unclick the Smooth button after you’re satisfied with the smoothness.



Now you'll want to go to Misc. in the upper right-hand corner, choose Advanced, and choose Save Geometry under option two.





Now go in Blender, go to File/Import/OBJ. On the right-hand side there will be a small row of icons including a camera, sphere, etc. Choose the wrench, click Add Modifier, and then choose Solidify.



Change Thickness to 0.03, and Offset to 0. Make sure High Quality Normals and Fill Rim are checked. (Note for future prints: Our model had some problems with its boundary when printing; it may help to flip the normals at this point and see if that helps solve the problem.)



Finally, hit Apply, then go to File/Export/STL.

Friday, June 6, 2014

Day 284 - Friday Fail: Using failure as a design element, or Psychoalphadicsobetabioaquadoloop

Today we printed peetersm's Customizable DrooLoop Flowers on Thingiverse. The one on the left has the "windswept" look that he describes in his fan control video, caused by the printer fan blowing the strands to the right as they cooled. The one on the left was printed with the fan off, which helped a lot but which made the model generally too hot and gloopy as it printed.


Thingiverse link: http://www.thingiverse.com/make:81447

Settings: MakerBot Replicator 2 on the recommended .2mm/standard layer height for this model. I couldn't figure out how to turn the fan off for just the petal loops (I could have it start off and then turn on at a specified layer, but I needed the opposite), so for the second flower head I made a custom profile where the fan was off all of the tie.

Technical notes, printing flavor: Here's a video showing the ingenious way that this model is printed; the flower head is printed upside-down, like a cup, and then the printer nozzle swings loops out into empty, unsupported space and back again. It's great fun to watch and makes really organic-looking shapes. Normally printing an unsupported overhang would cause a failure, but here that failure is built into the design itself.


Technical notes, musical flavor: To swim underwater and not get wet, let Parliament show you how to Aqua Boogie.


BONUS FAIL: I'm completely failing to keep up with time, and posted this over a week late! We move on July 1 and hopefully after that I can be caught up and on track each day. If you're reading this in the future when I'm already caught up then please pretend that this paragraph isn't here and that everything was posted in a timely fashion every single day.

Thursday, June 5, 2014

Day 283 - Everything will be forever centered around Pokemon

One last print for C's Pokemon addiction: jessed's Pokemon Deck Box on Thingiverse.


Thingiverse link: http://www.thingiverse.com/make:81427

Settings: MakerBot Replicator 2 with .3mm/low and a raft, on blue painter's tape on a glass build platform.

Technical notes, printing flavor: For some reason large, flat things tend to print out all stringy on my Replicator 2. This isn't a new thing; we've had this problem since at least as far back as when we were printing Menger Coasters on Day 121 and Day 122. The situation improves if I switch to .2mm layer resolution, but does not go away entirely. The weird thing is the the rafts print perfectly, with flat, beautiful surfaces. If you know why this happens and what setting or technique will help, please let me know!

Wednesday, June 4, 2014

Day 282 - Must print all the Pokemon

Can you print just two Pokemon models for a 9-year-old? No. Two is not enough. You must print many, many Pokemon and then also print a full set for a friend's birthday. Today we are joined by FLOWALISTIK's Low-Poly Squirtle and Low-Poly Totodile models from Thingiverse. I'm really impressed with all four of these models. They are each designed to print perfectly without support and utilise extremely efficient choices of low-poly faces. Great design work by FLOWALISTIK, just please don't make me print any more of these right now.


Thingiverse link for (blue) Squirtle: http://www.thingiverse.com/thing:319413
Thingiverse link for (red) Totodile: http://www.thingiverse.com/thing:341719

Settings: Replicator 2 on .3mm/low, as usual.

Tuesday, June 3, 2014

Day 281 - Low-Poly Charmander and Bulbasaur

Pokemon fever has recently gripped my son's group of friends and now everything is about Pokemon cards more cards gotta get the best cards. As a surprise I printed FLOWALISTIK's lovely Low-Poly Charmander and Low-Poly Bulbasaur models for C, to celebrate his last week of school. These prints are expertly designed with about the lowest poly/face count that a model could have while still evoking Charmander and Bulbasaur. Very cool!


Thingiverse link for (green) Bulbasaur: http://www.thingiverse.com/thing:327753
Thingiverse link for (orange) Charmander: http://www.thingiverse.com/thing:323038

Settings: MakerBot Replicator 2 on .3mm/low with a raft, on blue tape on glass.

Monday, June 2, 2014

Day 280 - USAMO champion prints

Today I had the pleasure of meeting the 2014 USA Mathematical Olympiad champions at their awards celebration at the headquarters of the Mathematical Association of America in DC. We kicked off the day with a 3D-printing workshop. The students worked in four teams to design objects that would be printed later in the day. Most of the students had no design experience at all, but in under an hour they had collaborated to design some great things:


Three of the four models were made in Tinkercad. The spheres and half-spheres were made while the students learned how to use the Align and Hole tools. The figures with arms in the air were designed with extensive use of the Ruler tool and hand-calculated distances. The rockets were a minor miracle, as the students had decided to make one rocket that fits inside another and had to make a good guess for the amount of clearance/tolerance. They only had one try to make that guess, but they hit it square on the nose! The small rocket clicks into the large rocket beautifully.

The twisted square pyramid was made in OpenSCAD by a group in which one student had done some preliminary work (see Day 279). After a back-of-the-napkin calculation and some fights with compiling errors, this is what they made:


At the time I was helping all four groups and so didn't have a chance to ask the students about their construction, so let's take a moment to deconstruct it now. Their model is clearly a stack of rotated squares, each higher than the other and with corners on the edges of the supporting square. The part that needs calculating is determining how much to scale each square so that its corners align with the square below. From the students' code we can see that they are using a scaling factor sc determined by the ratio of the sum of the cosine and the sine of the angle of rotation. Why did they do that? Using some basic trigonometry we can draw out the following:


Once the picture is drawn there isn't much to do; the only thing you have to start with is the angle alpha and the original side length of 1. With a little trigonometry you can figure out the lengths of the legs a and b in the diagram, but what you really want it is the new side length h. The key insight is to realize that b = 1 so that you can solve for h, which becomes the scaling factor.

The USAMO students are some of the smartest, quickest math students in the nation. The top scorers will go on to represent our country in the International Mathematical Olympiad. They will go to college pretty much wherever they want to. They've worked amazingly hard to get to the level they are at, including taking extra courses and training workshops from organizations like the Art of Problem Solving. When they see a problem to solve they dive in fearlessly. They are curious, relentless, driven. Obsessive, even. In other words, they already think like mathematicians. Most importantly, like all mathematicians, they are experts in something that most people are terrible at, and it's not what you think it is; it's not calculating, or reasoning, or number sense, although they probably have all that as well. It's being able to be WRONG. To fail. To be stuck, confused, and lost. And then to get back up again and find another way around the problem.

One reason I was particularly excited to run a 3D-printing workshop with the USAMO champions was because I knew that most of them would have tons of mathematical experience, but no experience at all with 3D printing or design. These students are used to being the best. Not the best in their class or the best in their school, or even the best in their state. The best in the country. And competing with the best in the world. They are used to success. But in a 3D-printing workshop the playing field is level again, and the USAMO students struggled with basic alignment issues, design problems, and coding syntax just like all my other 3D students do.

Sometimes in my job as a math professor I see students who were rock stars in high school burn out once they get to college and are faced with new mathematics that they don't already know how to do. Those students somehow go from being experts at failing and problem-solving to being unable or unwilling to be stuck or feel stupid. The USAMO champions are at the top of their game and I wanted to remind them that they can still try new things and fail when they have to. And they did a great job of it. :)

UPDATE: Katherine Merow wrote a nice article for the MAA News about this called USAMO Winners Celebrated - and Challenged.

Sunday, June 1, 2014

Day 279 - Pre-USAMO prints

Today we are firing up our travel Afinia H-Series to get ready for tomorrow's 3D-printing workshop at the USA Math Olympiad award ceremony at the MAA Headquarters in Washington DC. The twelve student champions will each be designing and/or printing a 3D model at the workshop. One student did his homework, learned how to use OpenSCAD in advance, and then emailed me a snowman design he made from scratch. Here is his code:

x = 8.0;

module nose() {
color("orange") scale([3, .5, .5]) sphere(5);
}

module eye() {
color("black") sphere(2.5);
}

module face() {
translate([11, 0, 0]) nose();
translate([x * 1.55, x * .5, x * .5]) eye();
translate([x * 1.55, -x * .5, x * .5]) eye();
}

module body() {
sphere(25);
translate([0, 0, 30]) {
sphere(20);
translate([0, 0, 25]) {
sphere(15);
}
}
}

module arm() {
color([.6, .3, 0, 1]) {
cylinder(20, 1.5, 1.5);
}
}

module snowman()
{
union() {
color([.7, .7, 1, 1]) body();
translate([0, 0, 55]) face();
translate([4, 16, 37.5]) rotate([-135, -45, 0]) arm();
translate([4, -16, 37.5]) rotate([135, -45, 0]) arm();
}
}

translate([0, 0, 16]) intersection() {
color([.7, .7, 1, 1]) translate([-50, -50, -16]) cube([100, 100, 90]);
snowman($fn = 100);
}

I printed this model on the Afinia today, but the arms didn't get supported (maybe they were too small to be detected by the slicing software as needing support?), so they printed as little fuzzy pom-pons instead of looking like proper sticks. I added the following to the OpenSCAD to support the arms with tall truncated cones that can be cut off later:

// add arm support poles
translate([14,-30,0]) cylinder(h=45,r1=3,r2=1);
translate([14,30,0]) cylinder(h=45,r1=3,r2=1);

And here is the result:


Settings: Printed on an Afinia H-Series with super bling Build-Tak and glass build plate. If you look closely at the back of the build plate you can see two of walter's Customizable Platform Clips from Thingiverse holding down the glass build plate. The usual binder clips were too small to fit around the glass build plate so I printed walter's customized clips with the following settings:

  • _platformGap = 7.2 
  • _wallThickness = 1.0 
  • _style = square 
  • _diameter = 2.2 
  • _length = 16

One of the things I like most about the Afinia is its opaque white ABS filament; it looks so smooth and matte, never shiny. Perfect for a snowman!  On the other hand, for something detailed like the Videogame Die all the way back from Day 12 that another of the USAMO students requested, the MakerBot Replicator 2 is the way to go:


Thingiverse link: http://www.thingiverse.com/make:80345

Settings: Printed on a MakerBot Replicator 2 with .3mm/low settings and raft, but NO supports. NOT using supports is key, because supports will fill up the designs on at least two sides of the die and be impossible to remove afterwards.

UPDATE: The student that did his homework turned out to be Joshua Brackensiek from Arizona College Prep-Erie, who got a perfect score on the USAMO this year. He also turned out to be a lovely person and it was a great pleasure meeting him and his mother at the award ceremony.

Saturday, May 31, 2014

Day 278 - Silver pentagonal hexacontahedron bracelet

Back on Day 218 we printed a bracelet built by extracting the center rings of a Pentagonal Hexacontahedron in TopMod. This week we finally received the stainless steel version we ordered from Shapeways, and it is beautiful!


It's pretty bulky so it isn't cheap, and you have to physically bend it open to get it on, then closed to make it tight again (although repeated bending does not seem to have any ill-effects so far). If you want to purchase one you can do so at the Shapeways link below. Or you can download my file from Thingiverse and print one for free on your own machine!

Thingiverse link: http://www.thingiverse.com/thing:288182
Shapeways link: http://www.shapeways.com/model/1860381/pentagonal-hexacontahedron-bracelet.html

Settings: For printing yourself, see Day 218. For Shapeways, just choose the metal that you want and they will do the rest.

Friday, May 30, 2014

Day 277 - Friday Fail: Diameter-is-not-radius edition, with Customizable Power Hair Clips!

Say it with me now: If you measure across a cylinder with calipers, you get the diameter. The DI-AM-E-TER. Not the radius. Just saying, giant-model-on-the-right:


As you can see, today we printed some power hair clips. Welcome to a special Ladies' edition of Friday Fail! To illustrate why custom hair clips might be necessary I am going to break a personal rule and show you a picture of myself. Note the mountain of unreasonable hair. It's impossible to tie up with regular barrettes and clips. It does not obey.


Only a few types of store-bought clips will keep this mess of hair up. Even those that work at first end up breaking within a week or two. Like all accessories and clothing for me, nothing works exactly the way I need it to work. (Side note: It was only yesterday that I put on the first piece of women's clothing that ever actually fit me in my entire adult life. It was from eshakti.com, who will make clothes to custom-fit you given whatever measurements you provide. Until yesterday I thought that *I* was the wrong shape. Turns out it was the *clothes* that were the wrong shape. Screw you, clothes. #yesallwomen)

Anyway, today I designed a power hair clip that can tame even my monster hair. The design is based on an old clip of mine that sort of worked for a while and now I can't find anywhere.


Here are two of the clips in action. The fact that only two of the clips were needed here is itself a miracle; I'm usually tied up with five or six store-bought clips:


These power hair clips were made in OpenSCAD with some mesh management in TopMod afterwards to smooth them up a bit. Since your hair isn't my hair, I also put a parametric OpenSCAD model on the Thingiverse Customizer so you can eshakti it up yourself.

Thingiverse link: http://www.thingiverse.com/thing:354313

Settings: Printed on a MakerBot Replicator 2 on .3mm/low setting. Raft is not strictly necessary even over tape-on-glass, but if you're going to print multiple copies at once and your platform doesn't level completely then I recommend a raft.

Technical notes, hack flavor: Yes, this model is a hack. I made it by defining a sequence of coordinates that connected up into the basic shape that I wanted, which is why it looks all jagged and unprofessional. On the other hand the clips will be mostly buried under piles of hair so it really doesn't matter! The pre-made small and large power clip models were remeshed to be smoother in TopMod, using two applications of "Doo Sabin" with "Check for multiple edges" selected. (Note: TopMod can't import STL files but it will import OBJ files, which you can export from MeshLab; however for some reason TopMod *can* export STL files, so at least you won't have to convert back afterwards.)  If you make custom sizes in the Customizer then you'll have to do your own remeshing or enjoy a more choppy look. Here's what the large clip looks like before the double Doo Sabin:


And here's what it looks like after we press "Perform Remeshing" a couple of times:


Technical notes, trig flavor: There is some nice basic trigonometry in the construction, specifically this: If you want to make some coordinates around a circle, use the fact that each point on the circle can be expressed as (r*cos(angle),r*sin(angle)), where r is the radius (RADIUS NOT DIAMETER) of the circle and the angle is measured between the positive side of the x-axis and the line from the origin to the desired point on the unit circle. See Math Open Reference for more details on the math involved. In OpenSCAD angles are measured in degrees instead of radians which can be kind of a pain, so instead of using the OpenSCAD sine and cosine functions I just computed the trig values myself; for example cos(45 degrees) = sqrt(2)/2. The first six points in the code below are around a circle of radius loop_radius, and the remaining points trace out the clip itself.

Thursday, May 29, 2014

Day 276 - Petal conformation of 6_2

Today is my favorite from the 3D-Printed Conformations of Knots through 7 Crossings series that my Math 297 students developed last semester in the JMU 3-SPACE classroom. It's a petal knot conformation of 6_2, which means that there is an angle from which all of the crossings line up on top of one another to form a single daisy-like crossing. Colin Adams of Williams College, together with an army of amazing students, proved recently that every knot has a petal conformation. They also came up with explicit constructions for some of those conformations, one of which we used to print today's model:


Thingiverse link: http://www.thingiverse.com/make:80268

Settings: Printed on a Replicator 2 with our usual custom knot slicing profile.

Technical notes, Mathematica flavor: Today's petal knot was designed and printed by JMU Student Jonathan Gerhard, using the method from Day 152 and data sent to us by Adams' student Daniel Vitek. Here's Jonathan's walkthough of what he did:

The data for the petal knot conformation of 6_2 came in the form of 500 points in space determined by the following Mathematica code:

Bumps[t_, n_] := If[Abs[Mod[t, n, -n/2]] > 1, 0, Cos[Ï€*Mod[t, n, -n/2]/2]^2];

BumpSum[p_, t_] := Sum[p[[i]]*Bumps[t + 1 - i, Length[p]], {i, 1, Length[p]}];

PetalPlot[p_] := ParametricPlot3D[{
 Sin[Ï€*t]*Cos[Ï€*t/Length[p]], 
 Sin[Ï€*t]*Sin[Ï€*t/Length[p]], 
 BumpSum[p, t]},
 {t, 0, Length[p]}];

p = {1, 3, 5, 2, 8, 4, 7, 9, 6};

points = N[{Sin[Ï€*t]*Cos[Ï€*t/Length[p]], Sin[Ï€*t]*Sin[Ï€*t/Length[p]],
     BumpSum[p, t]} /. ({t -> #} & /@ (Range[0, 500]/500*Length[p]))];

ListPointPlot3D[points]

Petal62Points.jpg

To get a smooth representation we could just use Tube in Mathematica, as follows:

Graphics3D[Tube[points, .075]]

62PetalThick.jpg

This looked good, however, it was very tall. So I modified it by changing the BumpSum[p, t]} in PetalPlot[p_] to 0.26BumpSum[p, t]}to make the height smaller.

Mathematica models can sometimes export badly, so instead of using the Tube model above I used the OpenSCAD technique we've been using for our data-defined knots (see for example Day 272). To do this, I first had to open the 500 Mathematica datapoints in TextEdit and run a "Find and Replace" to change all “{“s to “[“ and all “}” to “],”s.  Then I input the reformatted data points into the following OpenScad code (not all of the points are included here because there are so many!):

Paths = [[
[0., 0., 0.26],[0.05651741885454146, 0.00035511408887296787, 0.26041559697166655],[0.11284747420775955, 0.0014181578334111625, 0.2616610592647978],[0.16880345185324083, 0.0031822470046126636, 0.2637324052612605],[0.22419993383963085, 0.005635945627807872, 0.2666230130754899],[0.27885344076990115, 0.008763322416738774, 0.27032364172399476],
%...lots of data points
[-0.27885344076990115, 0.008763322416738774, 0.28580910430998696],[-0.22419993383963085, 0.005635945627807872, 0.27655753268872485],[-0.16880345185324083, 0.0031822470046126636, 0.26933101315315133],[-0.11284747420775955, 0.0014181578334111625, 0.2641526481619946],[-0.05651741885454146, 0.00035511408887296787, 0.26103899242916623],[0., 0., 0.26],[0.05651741885454146, 0.00035511408887296787, 0.26041559697166655],
]];
// Sides of the tube
Sides = 30;
// Radius of tube
Radius = .1;
//Scale of knot
Scale= 3;

Colors = [[1,0,0],[0,1,0],[0,0,1],[1,1,0],[1,0,1],[0,1,1]];
module disc_p2p(p1, p2, r) {
  assign(p = p2 - p1)
  translate(p1 + p/2)
    rotate([0, 0, atan2(p[1], p[0])])
    rotate([0, atan2(sqrt(pow(p[0], 2)+pow(p[1], 2)),p[2]), 0])
    render() cylinder(h = 0.1, r1 = r, r2 = 0);
};

module knot_path(path,r) {
  for (t = [0: 1: len(path)-1 ])
    assign (p0 = path[t],
      p1 = path[(t + 1) % len(path)],
      p2 = path[(t + 2) % len(path)] )
    hull() {
      disc_p2p (p0,p1,r);
      disc_p2p (p1,p2,r);
    }
};

module knot(paths,r)
  for (i = [0:1:len(paths)-1])
    color(Colors[i])
     knot_path(paths[i],r);

$fn=Sides;
scale(Scale)
knot(Paths,Radius);

Compile and render this by hitting “F6”. Once it finishes (which will take forever), go to the OpenSCAD Design menu and choose “Export as STL”. And you’re done!

Wednesday, May 28, 2014

Day 275 - Mosaic conformation of 6_1

Today's knot print is a mosaic projection of 6_1: 


Thingiverse link: http://www.thingiverse.com/make:80243

Settings: Printed on a Replicator 2 with .3mm/low and normal support settings.

Technical notes, math flavor: This knot was designed and printed by JMU Student Taylor Meador. The images in her description below are from slides of a Knot Mosaic talk from Lew Ludwig of Denison College.

A mosaic projection of a knot is one that can be constructed as a mosaic using any of the 11 possible mosaic tiles:


We say that a mosaic projection is n-mosaic if it can be enclosed in an nxn square, and that the mosaic number of a knot is the minimum n such that the knot has an n-mosaic projection. The mosaic number for today's knot 6_1 is 5, and our conformation is taken from the figure below right:


Interestingly, as you can see in the figure, in order to realize a 5-mosaic projection of 6_1 we had to use an inefficient projection with seven crossings instead of six. In other words, in order to achieve a minimal mosaic number we had to use a projection with a non-minimal crossing number. 

Technical notes, OpenSCAD flavor: Taylor designed this model in OpenSCAD based on kitwallace's minimal stick code by constructing (x,y,z) corner coordinates near the crossings, based on the picture above right. She describes her process as follows:

The code is a list of coordinates interpreted directly from the 2D 6_1 mosaic. We added coordinates one at a time to make a path around the knot.  I reinterpreted the 5 x 5 mosaic board as an (x,y) coordinate plane in OpenSCAD, with each mosaic tile edge representing 4 units on the (x,y) plane.  I used the z-coordinate to allow the knot to pass over or under itself at the crossings; overcrossings simply remained at level z=1, and undercrossings were adjusted to z=0. For example, traveling across one mosaic tile from left to right while following an undercrossing would result in coordinates that move across, then down, then across, then up, then across: 

(x,y,1) --> (x+1,y,1) --> (x+1,y,0) --> (x+3,y,0) --> (x+3,y,1) --> (x+4,y,1).

The a and b parameters in the code allow us to scale the (x,y) plane separately from the z-axis, so that we can better adjust the clearance around and inside the crossings. 

Tuesday, May 27, 2014

Day 274 - Customizable Sock Bones

Sometimes I think I got into this 3D printing thing just so I would have the opportunity to say things like "customizable sock bones". Here they are:


These dogbone-like objects are for holding pairs of socks together, so you don't have to roll or tie up your socks. My sock drawer used to be an unholy mess of partnerless socks, but now it looks like this:


Let's be honest, though. If my sock drawer was really going to look like this then I wouldn't need any clips. After rummaging around it actually looks like this:


That's at least a thousand times better than its previous state, which I am not going to show you. The sock bones shown in these pictures work for standard men's socks, folded in half and then clipped in the middle. At the link below you'll also find a Customizer model that you can adjust to your size of socks.

Thingiverse link: http://www.thingiverse.com/thing:352805

Settings: Printed on a MakerBot Replicator 2 at .3mm/low. Printing six at a time takes about an hour, and it's a good way to use up scraps of filament you have lying around.

Technical notes, OpenSCAD flavor: This model is really simple; just a 2D shape made of circles and rectangles, extruded into 3D using linear_extrude.

// mathgrrl customizable sock bone

/////////////////////////////////////////////////////////////
// parameters ///////////////////////////////////////////////

// Length from one side of the sock to the other
length = 86; 

// Width/thickness of the folded sock
width = 13; 

// parameters that the user does not get to specify
$fn = 24*1;
radius = width*(8/13);
thickness = 2*1; 
height = 10*1; 

/////////////////////////////////////////////////////////////
// renders //////////////////////////////////////////////////

sockbone();

/////////////////////////////////////////////////////////////
// module for clip //////////////////////////////////////////

module sockbone(){
linear_extrude(height)
// 2D shape of bone holder
union(){
difference(){
// outer bone
union(){
translate([radius,0,0]) 
circle(radius);
translate([radius,-width/2,0]) 
square([length-2*radius,width]);
translate([length-radius,0,0]) 
circle(radius);
};
// take away inner bone
union(){
translate([radius,0,0]) 
circle(radius-thickness);
translate([radius,-(width-2*thickness)/2,0]) 
square([length-2*radius,width-2*thickness]);
translate([length-radius,0,0])
circle(radius-thickness);
}
// take away opening
translate([.25*length,0,0]) 
square(.5*length);
}
// rounded end caps
translate([.25*length,width/2-thickness/2,0])
circle(.7*thickness);
translate([.75*length,width/2-thickness/2,0])
circle(.7*thickness);
}
}