FOUR DAYS LEFT.
Today we printed our fourth Platonic solid hinge/snap model, of a dodecahedron. This is the same shape we printed back on Day 83 as part of our old Hinged Nets and Snap Tiles series but now the dimensions and tolerances of the model are customizable in OpenSCAD and at the Thingiverse Customizer link below.
Thingiverse link: http://www.thingiverse.com/thing:440853
Settings: Printed on a Replicator 2 with .3mm layer height and no raft, no supports.
Welcome to MakerHome
We've completed our yearlong print-a-day project!
All new material is now at Hacktastic: www.mathgrrl.com
Saturday, August 23, 2014
Friday, August 22, 2014
Day 361 - Friday Fail: 72 Pencils edition
FIVE DAYS LEFT.
Today we printed a redesign of AuntDaisy's Geo Hart 72 Pencil Holder from Thingiverse. Instead of scaling that model we made two simple new models in Tinkercad. Each model is just a hexagon ring with holes in it, used to line up pencils to make George Hart's wonderful 72 Pencils sculpture. Here's what our 72 pencils looked like right before we removed the last two rings and a stray rubber band that was keeping in the front pencil:
And here's what the rings themselves look like. The blue rings are sized to fit snugly around the erasers of standard yellow Triconderoga pencils, and the red rings have large holes that are sized to fit around the body of the pencils at the pointy ends. I didn't need all eight of these; two of each were enough to keep half of the pencils in place so that I could line things up and slide in the other 36.
Tinkercad link: https://www.tinkercad.com/things/aTD0Zg8rDSj-pencil-sculpture-helpers
Thingiverse link: http://www.thingiverse.com/thing:440151
Technical notes, failure flavor: The sculpture seemed so, so sturdy that we somehow thought it would all stay together even after we removed the last helper rings. We saw online that other people use crazy glue to hold together parts of the model but that is OTHER PEOPLE. We thought we were soooo much better and would never have to do such a thing. Surely WE can do this without glue, everything is going so well, what could happen?
The pencils are now assembled into a much simpler sculpture that we proudly display in our lovely home:
Today we printed a redesign of AuntDaisy's Geo Hart 72 Pencil Holder from Thingiverse. Instead of scaling that model we made two simple new models in Tinkercad. Each model is just a hexagon ring with holes in it, used to line up pencils to make George Hart's wonderful 72 Pencils sculpture. Here's what our 72 pencils looked like right before we removed the last two rings and a stray rubber band that was keeping in the front pencil:
And here's what the rings themselves look like. The blue rings are sized to fit snugly around the erasers of standard yellow Triconderoga pencils, and the red rings have large holes that are sized to fit around the body of the pencils at the pointy ends. I didn't need all eight of these; two of each were enough to keep half of the pencils in place so that I could line things up and slide in the other 36.
Tinkercad link: https://www.tinkercad.com/things/aTD0Zg8rDSj-pencil-sculpture-helpers
Thingiverse link: http://www.thingiverse.com/thing:440151
Technical notes, failure flavor: The sculpture seemed so, so sturdy that we somehow thought it would all stay together even after we removed the last helper rings. We saw online that other people use crazy glue to hold together parts of the model but that is OTHER PEOPLE. We thought we were soooo much better and would never have to do such a thing. Surely WE can do this without glue, everything is going so well, what could happen?
The pencils are now assembled into a much simpler sculpture that we proudly display in our lovely home:
Thursday, August 21, 2014
Day 360 - Shapeways print of the TRI bracelet
SIX DAYS LEFT.
The TRI bracelet (Day 320) is back from Shapeways! It's delicate but very beautiful and came out perfectly. You can bend it easily in your hand and it is soft on the wrist. It sort of feels like a strip of light, sanded tree bark. I wouldn't wear it to a bar fight or under a heavy jacket that I might take on and off a lot, but it is plenty sturdy for casual workday/eveningwear use.
Shapeways link - if you don't have a printer or want a light, delicate version of the bracelet, Shapeways will print and mail this to bracelet you for $10: https://www.shapeways.com/model/2293264/function-bracelet-tri-large.html?materialId=77
Thingiverse link - Customize to fit your own size and preferences, download for free, and print it yourself! http://www.thingiverse.com/thing:416336
Wednesday, August 20, 2014
Day 359 - Customizable hinge/snap Octahedron net
Today we modified the code of the hinge/snap Tetrahedron net from Day 353 to make an Octahedral net. Here are two copies, one unfolded and one folded:
Thingiverse link: http://www.thingiverse.com/thing:440141
Settings: Printed on a MakerBot Replicator 2 with .3mm layer height and no raft or supports, in 31 minutes.
Technical notes, why-are-we-doing-this flavor: The hinge/snap models we've been making this week are better than the ones we made for the Tetrahedron we made on Day 80, the Cube we made on Day 81, and the Octahedron we made on Day 82, for five reasons:
First of all, the snaps on the old models were not "ambidextrous"; some snaps had more tines than others, and we had to think carefully to make sure that we put the correct type of snaps on each face. In our new models every snap on every side is identical, and due to the orientability of the polyhedra these snaps automatically align together nicely.
Second, and by far the most importantly, the old hinge/snap models were made in Tinkercad while the new models were made in OpenSCAD. The reason this is important is that the OpenSCAD models are parametric; in the OpenSCAD code we can change the length, thickness, and tolerances simply by changing the appropriate numerical parameter and then re-compiling. In Tinkercad, changing tolerances meant re-doing each hinge and snap by hand. Even better, since these new models are designed in OpenSCAD we can upload them to the Thingiverse Customizer so that users can change parameters as they like without ever having to deal with the actual code.
Third, because of the way the OpenSCAD code for these models was written we will be able to use the code to create more exotic polyhedra than the Platonic solids, without too much extra work. For example we could construct nets for all of the semi-regular polyhedra, with different types of faces within the same model.
Fourth, because we stole some design code from our Print-in-Place Fidget Cube, these new models have much more reliable hinges with fewer non-manifold edges and fewer printing problems. The new hinges can also be printed smaller than the previous models' hinges.
The fifth reason is kind of weird, which is that the snaps and hinges on this model don't look similar. We constructed the old models so that the snaps and hinges looked as much like each other as possible, so that the folded-up object would look as regular and homogeneous as possible. But it turns out to be kind of difficult to unfold an assembled object if you can't easily tell which edges have the hinges and which have the snaps! For the new nets we purposely made the snaps and hinges easy to tell apart.
I'm glad to be finishing out the year with this re-do of our old hinge/snap models, because it really shows how much I've managed to learn this year, especially in OpenSCAD. There are so many things I didn't get a chance to learn, and I still know so little about everything, including OpenSCAD, but for this model at least I can see how I grew up a little bit over the course of the year. There are only six days left to our year of print-a-day. Six is the best number. Tomorrow we start counting down to the end...
Thingiverse link: http://www.thingiverse.com/thing:440141
Settings: Printed on a MakerBot Replicator 2 with .3mm layer height and no raft or supports, in 31 minutes.
Technical notes, why-are-we-doing-this flavor: The hinge/snap models we've been making this week are better than the ones we made for the Tetrahedron we made on Day 80, the Cube we made on Day 81, and the Octahedron we made on Day 82, for five reasons:
First of all, the snaps on the old models were not "ambidextrous"; some snaps had more tines than others, and we had to think carefully to make sure that we put the correct type of snaps on each face. In our new models every snap on every side is identical, and due to the orientability of the polyhedra these snaps automatically align together nicely.
Second, and by far the most importantly, the old hinge/snap models were made in Tinkercad while the new models were made in OpenSCAD. The reason this is important is that the OpenSCAD models are parametric; in the OpenSCAD code we can change the length, thickness, and tolerances simply by changing the appropriate numerical parameter and then re-compiling. In Tinkercad, changing tolerances meant re-doing each hinge and snap by hand. Even better, since these new models are designed in OpenSCAD we can upload them to the Thingiverse Customizer so that users can change parameters as they like without ever having to deal with the actual code.
Third, because of the way the OpenSCAD code for these models was written we will be able to use the code to create more exotic polyhedra than the Platonic solids, without too much extra work. For example we could construct nets for all of the semi-regular polyhedra, with different types of faces within the same model.
Fourth, because we stole some design code from our Print-in-Place Fidget Cube, these new models have much more reliable hinges with fewer non-manifold edges and fewer printing problems. The new hinges can also be printed smaller than the previous models' hinges.
The fifth reason is kind of weird, which is that the snaps and hinges on this model don't look similar. We constructed the old models so that the snaps and hinges looked as much like each other as possible, so that the folded-up object would look as regular and homogeneous as possible. But it turns out to be kind of difficult to unfold an assembled object if you can't easily tell which edges have the hinges and which have the snaps! For the new nets we purposely made the snaps and hinges easy to tell apart.
I'm glad to be finishing out the year with this re-do of our old hinge/snap models, because it really shows how much I've managed to learn this year, especially in OpenSCAD. There are so many things I didn't get a chance to learn, and I still know so little about everything, including OpenSCAD, but for this model at least I can see how I grew up a little bit over the course of the year. There are only six days left to our year of print-a-day. Six is the best number. Tomorrow we start counting down to the end...
Tuesday, August 19, 2014
Day 358 - iPhone stand binge
I can't believe it took me this long to get around to printing an iPhone stand. Phone cases and stands are the first thing that most of my students think of to print. But here I am, almost at the end of printing one thing a day for an entire freakin year, and it just now occurs to me that I need a stand for my iPhone. This is like when I learned to knit by struggling through a complicated Fair Isle Estonian sock pattern instead of starting with a scarf like everybody else. After a couple of years of knitting strange and complicated things I finally got around to knitting a scarf, and now almost everything I knit is some kind of scarf. I wonder if now that I've finally printed an iPhone stand I will print nothing but iPhone stands...
Or maybe I can just get it out of my system all at once. We printed five stands today:
Print One: desktoplathes' iPhone stand with 2 settings. Can't get simpler than this. Very nice! The two angled positions work particularly well if you have a case on your phone, since the lip of the angle grabs the front lip of the case. This results in a very sturdy stand, even though it is so small you could easily carry it around in your pocket.
Thingiverse link: http://www.thingiverse.com/make:91016
Settings: MakerBot Replicator 2 with raft but no supports, .3mm layer height, 22 minutes.
Print Two: SunnyJames' 6 Position iPhone stand. A lot like the one above but with an extra slot for when you want to stand your phone dead vertical. I can see that being useful for filming. The center slot is too small for our iPhone 4 with case, and too large for our iPhone 5 without case; but for the iPhone 4 with no case this is Goldilocks. The outside slots work with or without the case, with either iPhone model.
Thingiverse link: http://www.thingiverse.com/make:91017
Settings: MakerBot Replicator 2 with raft but no supports, .3mm layer height, 30 minutes.
Print Three: adampaterson's Phone Stand Concept - Dual Angle model. This one is really interesting, and it took me a while to figure out how to use it. It turns out to be perfect for that super-low-angle position where you want to keep your phone on your desk and be able to use the touch screen. Yes! This is the only stand we printed that has this unique and very useful super-low position.
Thingiverse link: http://www.thingiverse.com/make:91021
Settings: MakerBot Replicator 2 with raft but no supports, .3mm layer height, 27 minutes.
Print Four: JohnA's Kickstand for iPhone / iPad Touch. I love how tiny this is; you could even put this on your keychain if you wanted to. In fact, it has a hole that you could use to do just that! However I had trouble balancing my phone with this one, and sometimes I didn't get it quite right and the phone would fall over. Perhaps I need to print it at a slightly different scale to get it to fit correctly with my model of phone.
Thingiverse link: http://www.thingiverse.com/make:91022
Settings: MakerBot Replicator 2 with raft but no supports, .3mm layer height, 22 minutes.
Print Five: tkramm's iPhone 5 Stand. This one took about twice as long to print as the others, but it has a really sleek and professional design. I'm glad to have printed this one in black; it looks great with the phone. It's also very sturdy and gives access to the button on the front of the phone. There's only one angle option but it is a good one. Fits our iPhone 5 but not the iPhone 4.
Thingiverse link: http://www.thingiverse.com/make:91024
Settings: MakerBot Replicator 2 with raft but no supports, .3mm layer height, 57 minutes.
The verdict? Some are better for charging, some for watching videos, some for landscape, some for filming. And now I think we have enough iPhone stands for the whole family and I can stop printing them now.
Technical notes, time flavor: The five times listed above are from the MakerBot Desktop software's estimate; I used that measure in order to be consistent, because I didn't mark down the exact times for all of the items. In general the MakerWare estimated time is an over-estimate for the Replicator 2; for example, the fifth print actually took only 47 minutes, not 57. For the Replicator Mini the opposite is true: the MakerBot Desktop software tends to under-estimate the time needed for printing. In general we have the following:
Or maybe I can just get it out of my system all at once. We printed five stands today:
Print One: desktoplathes' iPhone stand with 2 settings. Can't get simpler than this. Very nice! The two angled positions work particularly well if you have a case on your phone, since the lip of the angle grabs the front lip of the case. This results in a very sturdy stand, even though it is so small you could easily carry it around in your pocket.
Thingiverse link: http://www.thingiverse.com/make:91016
Settings: MakerBot Replicator 2 with raft but no supports, .3mm layer height, 22 minutes.
Print Two: SunnyJames' 6 Position iPhone stand. A lot like the one above but with an extra slot for when you want to stand your phone dead vertical. I can see that being useful for filming. The center slot is too small for our iPhone 4 with case, and too large for our iPhone 5 without case; but for the iPhone 4 with no case this is Goldilocks. The outside slots work with or without the case, with either iPhone model.
Thingiverse link: http://www.thingiverse.com/make:91017
Settings: MakerBot Replicator 2 with raft but no supports, .3mm layer height, 30 minutes.
Print Three: adampaterson's Phone Stand Concept - Dual Angle model. This one is really interesting, and it took me a while to figure out how to use it. It turns out to be perfect for that super-low-angle position where you want to keep your phone on your desk and be able to use the touch screen. Yes! This is the only stand we printed that has this unique and very useful super-low position.
Thingiverse link: http://www.thingiverse.com/make:91021
Settings: MakerBot Replicator 2 with raft but no supports, .3mm layer height, 27 minutes.
Print Four: JohnA's Kickstand for iPhone / iPad Touch. I love how tiny this is; you could even put this on your keychain if you wanted to. In fact, it has a hole that you could use to do just that! However I had trouble balancing my phone with this one, and sometimes I didn't get it quite right and the phone would fall over. Perhaps I need to print it at a slightly different scale to get it to fit correctly with my model of phone.
Thingiverse link: http://www.thingiverse.com/make:91022
Settings: MakerBot Replicator 2 with raft but no supports, .3mm layer height, 22 minutes.
Print Five: tkramm's iPhone 5 Stand. This one took about twice as long to print as the others, but it has a really sleek and professional design. I'm glad to have printed this one in black; it looks great with the phone. It's also very sturdy and gives access to the button on the front of the phone. There's only one angle option but it is a good one. Fits our iPhone 5 but not the iPhone 4.
Thingiverse link: http://www.thingiverse.com/make:91024
Settings: MakerBot Replicator 2 with raft but no supports, .3mm layer height, 57 minutes.
The verdict? Some are better for charging, some for watching videos, some for landscape, some for filming. And now I think we have enough iPhone stands for the whole family and I can stop printing them now.
Technical notes, time flavor: The five times listed above are from the MakerBot Desktop software's estimate; I used that measure in order to be consistent, because I didn't mark down the exact times for all of the items. In general the MakerWare estimated time is an over-estimate for the Replicator 2; for example, the fifth print actually took only 47 minutes, not 57. For the Replicator Mini the opposite is true: the MakerBot Desktop software tends to under-estimate the time needed for printing. In general we have the following:
Actual Rep2 time < Estimated Rep2 time < Estimated Mini time < Actual Mini time.
Technical notes, counting flavor: The other day someone joked to me that I didn't actually print something every day this year because sometimes there are guest posts. Well joke's on you Mr. Husband, today I printed five things. :)
Monday, August 18, 2014
Day 357 - Printer challenge! 26 mm Level 3 Menger sponge
Today we had a visit from Rebecca Field, JMU mathematics professor, co-author, long-time friend, and fellow member of the Female mathematicians who have been known to have teal hair list. She is about to take over as head of the GSCI 104 3D Printing courses this fall in the JMU 3-SPACE classroom. In that classroom we have nearly a dozen Afinia H-Series 3D printers, currently running on ABS filament. Afinia now offers an option to print with PLA, and Dr. Field and the other directors of 3-SPACE are considering switching. PLA doesn't require a heated platform, and it has less problems with curling. We did some test prints with an Afinia using PLA and they looked really good. But as usual, the only question I really care about is: can we print a Menger sponge with it? The answer is yes, but not as well as in ABS. We also tested the MakerBot Replicator 2 and the MakerBot Mini, both in PLA. Here are the four results:
These are placed in order of quality from left to right; we'll detail each print below. The model we used was a base-repaired version of owens' game-changing, support-free Customizable Menger sponge model. It's only 26 millimeters on a side, which makes the holes extremely small on this model. I think this is about the limit of what a filament-type printer can handle, so it is a very challenging test.
Thingiverse link: http://www.thingiverse.com/thing:439910
Fourth place: The Afinia PLA print (the blue model on the left) came in last in our test. However, printing a Menger sponge, especially a very small Level 3 (!) Menger sponge, is one of the most difficult things we could have asked these printers to do. The small holes on this model are too small to even put a thin needle through! So while the Afinia PLA had some problems with the fine detail of this model - especially at the corners - it still did a pretty good job. For less crazy-detailed models the Afinia PLA did very nicely. But as you can see in the close-up, it had some problems with globbing up on the detailed bits:
Third place: Next in quality was the MakerBot Mini. The main problem with this model was threading between all of the holes in the model. And there are a lot of holes! The extruder for the Mini seems to have a problem when bridging over empty space; little bits get extruded as the nozzle passes through the space, which makes little spiderwebs across all the gaps. The Mini did a much better job than the Afinia on the corners, but the threading in the small holes is impossible to remove. We cleaned up the threads from the larger holes before the picture was taken.
Second place: The Afinia H-Series with ABS was very, very nice. The corners aren't as sharp as on the MakerBots, but the detail came out very nicely, with very clean holes all the way through. And you can't beat the opaque, soft look of the ABS. And the amazing yellow color! A very nice and reliable print; I've printed literally hundreds of these on the Afinias and they work very well.
First place: The winner is of course my best friend the MakerBot Replicator 2. I LOVE YOU REPLICATOR 2 PLEASE DO NOT BE DISCONTINUED. Sigh. The picture below is a bit shiny and does not do justice to the incredible sharpness and detail of this model; the top face is most representative. The Replicator 2 prints this model as if it was as easy as printing a solid cube, no worries. I have a print of a Level 3 Menger sponge from the JMU Engineering Department (thank you John Wild!) made on a fancy refrigerator-sized Dimension Elite printer, and the Replicator 2 print is just as good. In fact, it's better, since the dissolvable support material from the Dimension Elite doesn't quite get out of the smallest tunnels, while the Replicator model has fully open tunnels because of the way that it printed on its corner; nothing was ever printed in the tunnels, so nothing needs to come out. Super clean tiny holes all the way through and edges so sharp it almost hurts to hold on to the model. Fantastic!
These are placed in order of quality from left to right; we'll detail each print below. The model we used was a base-repaired version of owens' game-changing, support-free Customizable Menger sponge model. It's only 26 millimeters on a side, which makes the holes extremely small on this model. I think this is about the limit of what a filament-type printer can handle, so it is a very challenging test.
Thingiverse link: http://www.thingiverse.com/thing:439910
Fourth place: The Afinia PLA print (the blue model on the left) came in last in our test. However, printing a Menger sponge, especially a very small Level 3 (!) Menger sponge, is one of the most difficult things we could have asked these printers to do. The small holes on this model are too small to even put a thin needle through! So while the Afinia PLA had some problems with the fine detail of this model - especially at the corners - it still did a pretty good job. For less crazy-detailed models the Afinia PLA did very nicely. But as you can see in the close-up, it had some problems with globbing up on the detailed bits:
Third place: Next in quality was the MakerBot Mini. The main problem with this model was threading between all of the holes in the model. And there are a lot of holes! The extruder for the Mini seems to have a problem when bridging over empty space; little bits get extruded as the nozzle passes through the space, which makes little spiderwebs across all the gaps. The Mini did a much better job than the Afinia on the corners, but the threading in the small holes is impossible to remove. We cleaned up the threads from the larger holes before the picture was taken.
Second place: The Afinia H-Series with ABS was very, very nice. The corners aren't as sharp as on the MakerBots, but the detail came out very nicely, with very clean holes all the way through. And you can't beat the opaque, soft look of the ABS. And the amazing yellow color! A very nice and reliable print; I've printed literally hundreds of these on the Afinias and they work very well.
First place: The winner is of course my best friend the MakerBot Replicator 2. I LOVE YOU REPLICATOR 2 PLEASE DO NOT BE DISCONTINUED. Sigh. The picture below is a bit shiny and does not do justice to the incredible sharpness and detail of this model; the top face is most representative. The Replicator 2 prints this model as if it was as easy as printing a solid cube, no worries. I have a print of a Level 3 Menger sponge from the JMU Engineering Department (thank you John Wild!) made on a fancy refrigerator-sized Dimension Elite printer, and the Replicator 2 print is just as good. In fact, it's better, since the dissolvable support material from the Dimension Elite doesn't quite get out of the smallest tunnels, while the Replicator model has fully open tunnels because of the way that it printed on its corner; nothing was ever printed in the tunnels, so nothing needs to come out. Super clean tiny holes all the way through and edges so sharp it almost hurts to hold on to the model. Fantastic!
Sunday, August 17, 2014
Day 356 - Sunday guest: Fred Hohman and knot fibrations, part 2
Today we continue Fred Hohman's guest post from Day 355, in which he will print the knot fibrations he constructed yesterday...
Now that I have code that can generate trefoil knots and fibrations of any thickness, it’s time to start printing various versions of the models. The goal is to be able to print the trefoil knot separate from the pages to create a 3D puzzle. At the end of this post I’ll share some of my successful experiments in doing just that.
1. Printing the trefoil knot with one page with a gap.
Here I made a model of the trefoil knot with one page, but removed the points where the page meets the knot. In other words, there is a gap running along the knot where the page meets the surface of the knot. When printed, the page should be free to wiggle a little bit. Here is the object in Mathematica:
After exporting to STL and printing, this is the result:
Thingiverse link: http://www.thingiverse.com/thing:331530
2. Printing the trefoil knot with three pages with a gap.
This is a trefoil knot with three pages, all of which have gaps where the pages meet the knot. This knot is closely related to the previous model; however, two more pages have been added, all of which are equiangular (think of the Mercedes Benz logo). The print time on this can be a bit longer (an afternoon), and the clean-up of supports can get annoying. However, this model looks fantastic in person. Here it is in Mathematica:
And now printed:
Thingiverse link: http://www.thingiverse.com/thing:337185
3. Printing the trefoil knot and one page separately.
Here I printed the standard trefoil knot but edited the domain so that the knot itself is bigger. I also made a groove in the knot that follows where one page meets the surface, with hopes that if I could print a page separately, then I could snap the page into the knot. Next, I took one page and split it into two pieces with the plane z=0. With a little force, I was able to get both pieces in the knot. A good first start, but not ideal for consistent “puzzle-building”.
Current and future work.
This puzzle-building problem illustrates a simple idea, but can prove to be very complicated in practice. Many people have assembled large objects by printing smaller components; however, due to the complex geometry of the shape we are dealing with, slicing the knot in a particular way such that the pieces can be reassembled without blocking any other piece is an interesting and challenging problem for any 3D printing enthusiast.
My latest attempt has been to have Mathematica generate all twelve pages of Pi/6 thickness, cut each page into two pieces using the plane z=0, and import each piece individually into Blender, a free, open-source 3D modeling and animation software. In Blender, I added small holes in the bottom and top of each piece of a page. Once the hole was made, I printed the pieces of the pages and glued in small magnets to hold two pieces of the same page together (not all pages are same; in fact, every page is different from one another). I successfully printed a trefoil knot and 3 pages (6 pieces), all with magnets, to make a 7-piece 3D puzzle. Here is the process in Blender:
And here are the prints:
This coming year I will work to refine the process of adding holes; I may cut the pages at different angles too. Once a puzzle has been made and printed that is easy to piece together, contains multiple pieces, and is of appropriate size, I plan on posting the puzzle in its entirety on my Thingiverse profile—so be on the lookout!
I would like to thank Dr. Laura Taalman for the opportunity to write about my research so far, and Dr. David Gay at the University of Georgia for his guidance and access to a MakerBot Replicator 2.
Now that I have code that can generate trefoil knots and fibrations of any thickness, it’s time to start printing various versions of the models. The goal is to be able to print the trefoil knot separate from the pages to create a 3D puzzle. At the end of this post I’ll share some of my successful experiments in doing just that.
1. Printing the trefoil knot with one page with a gap.
Here I made a model of the trefoil knot with one page, but removed the points where the page meets the knot. In other words, there is a gap running along the knot where the page meets the surface of the knot. When printed, the page should be free to wiggle a little bit. Here is the object in Mathematica:
After exporting to STL and printing, this is the result:
Thingiverse link: http://www.thingiverse.com/thing:331530
2. Printing the trefoil knot with three pages with a gap.
This is a trefoil knot with three pages, all of which have gaps where the pages meet the knot. This knot is closely related to the previous model; however, two more pages have been added, all of which are equiangular (think of the Mercedes Benz logo). The print time on this can be a bit longer (an afternoon), and the clean-up of supports can get annoying. However, this model looks fantastic in person. Here it is in Mathematica:
And now printed:
Thingiverse link: http://www.thingiverse.com/thing:337185
3. Printing the trefoil knot and one page separately.
Here I printed the standard trefoil knot but edited the domain so that the knot itself is bigger. I also made a groove in the knot that follows where one page meets the surface, with hopes that if I could print a page separately, then I could snap the page into the knot. Next, I took one page and split it into two pieces with the plane z=0. With a little force, I was able to get both pieces in the knot. A good first start, but not ideal for consistent “puzzle-building”.
Current and future work.
This puzzle-building problem illustrates a simple idea, but can prove to be very complicated in practice. Many people have assembled large objects by printing smaller components; however, due to the complex geometry of the shape we are dealing with, slicing the knot in a particular way such that the pieces can be reassembled without blocking any other piece is an interesting and challenging problem for any 3D printing enthusiast.
My latest attempt has been to have Mathematica generate all twelve pages of Pi/6 thickness, cut each page into two pieces using the plane z=0, and import each piece individually into Blender, a free, open-source 3D modeling and animation software. In Blender, I added small holes in the bottom and top of each piece of a page. Once the hole was made, I printed the pieces of the pages and glued in small magnets to hold two pieces of the same page together (not all pages are same; in fact, every page is different from one another). I successfully printed a trefoil knot and 3 pages (6 pieces), all with magnets, to make a 7-piece 3D puzzle. Here is the process in Blender:
And here are the prints:
This coming year I will work to refine the process of adding holes; I may cut the pages at different angles too. Once a puzzle has been made and printed that is easy to piece together, contains multiple pieces, and is of appropriate size, I plan on posting the puzzle in its entirety on my Thingiverse profile—so be on the lookout!
I would like to thank Dr. Laura Taalman for the opportunity to write about my research so far, and Dr. David Gay at the University of Georgia for his guidance and access to a MakerBot Replicator 2.
Saturday, August 16, 2014
Day 355 - Saturday guest: Fred Hohman and knot fibrations, part 1
One thing about living in New York City is that you get a lot of guests. Lots of people come to the city and hotels are too expensive even to consider! We've had seven different people visit us since we moved here just a couple of months ago. Blog-wise it's the same story: now that the print-a-day year is wrapping up we have a lot of guests. Welcome all!
Today's guest poster is Fred Hohman (fredhohman on Thingiverse), an undergraduate mathematics student at the University of Georgia, student of David Gay as well as my good friend Jason Cantarella. Fred is the designer of the beautiful "trefoil trumpet" we printed on Day 311, and in the next two posts he'll be walking us through the math and the Mathematica of a sort of "3D puzzle" based on this trefoil.
Hello MakerHome and MakerHome readers!
I am Fred Hohman, a rising senior Mathematics and Physics student at the University of Georgia. I have been working under Dr. David Gay in the Department of Mathematics at the University of Georgia since the beginning of the year, and I will be continuing my work until my graduation in May 2015.
Earlier in the summer I had the wonderful opportunity to meet Dr. Laura Taalman (mathgrrl) after her talk at MoMath on “Making Mathematics Real: Knot Theory, Experimental Mathematics, and 3D Printing.“ After chatting about math and 3D printing she asked me say some words about my undergraduate research at UGA. You may have seen already Dr. Taalman’s earlier post “Day 311 — Trumpet Trefoil,” in which she introduced my trefoil knot. If you have ever seen a standard trefoil knot you’ll notice that the trefoil that was depicted is a bit different.
The goal of this project is to create a 3D puzzle of the trefoil knot and its fibrations via 3D printing.
Let’s start with some theory.
Theory and Stereographic Projection.
Consider the following function from C^2 to C (we can think of this as a function from R^4 to R^2 - see the Wikipedia entries for real n-space and complex n-space for more information): this function sends a coordinate pair (u, v), where u and v are complex numbers, to the quantity (u+i*v)^2-(u-i*v)^3, where i = sqrt(-1). This particular function’s zero-set, a set of points {(u,v), …} such that (u+i*v)^2=(u-i*v)^3, generates a trefoil knot through infinity. By considering inverse images of certain subsets of C we will generate a trefoil knot given our function’s zero-set; however, this inverse image is a subset of C^2. To obtain our knot and understand its subsets better, we need a method to realize our object in R^3.
As a preliminary example, consider a sphere in R^3 sitting on a plane (think of a ball sitting on a table). From the top of the sphere (think North Pole), draw a line segment downward through the sphere and ending at the table. Notice that this line segment intersects both the sphere and table once. We can do this same line drawing method over and over to obtain a one-to-one correlation from the sphere to the plane, i.e., every point (well, minus the exact top of the sphere!) on the sphere can be mapped to the plane. This is called stereographic projection, and Henry Segerman (henryseg on Thingiverse) has created a fantastic 3D printed model illustrating this method:
If we have a point light source (smartphone camera flash) and place it at the top of this model, light rays will act as the line segments in the above example. If held at the correct height, we should see the Cartesian grid on the table. I always keep this model in my backpack to demonstrate to people stereographic projection—I recommend printing it out!
So stereographic projection is a function from the unit sphere in R^3 onto R^2, but recall that our function is defined in R^4. For us to embed our object in R^3, we use a generalized version of stereographic projection to go from the unit sphere in R^4 to R^3. With this tool, we can compose the inverse stereographic projection function with our function defined above. So our new function now goes from R^3 -> C.
If we take inverse images of subsets of C, we now have a function that goes from C -> C^2 = R^4 -> R^3, i.e., our single, final function takes in certain subsets of C and outputs subsets of R^3—exactly what we want!
Mathematica, Plotting, and Resolution.
To generate 3D computer models of the trefoil knots, I chose to use Mathematica. RegionPlot3D, a built-in Mathematica function, plots regions in 3D space using inequalities. In order to use RegionPlot3D, the user must specify the domain of values to plot over in the x, y, and z directions, as well as a mathematical inequality. As an example we can generate a sphere of radius 1 by the following code:
Mathematica will plot all points (x, y, z) such that each point falls within the considered domain and obeys the given inequalities—but we can take this further. We can use multiple inequalities using boolean operators such as AND and OR. As an example, let’s consider the same sphere defined above, but restrict the region so that only points above the plane z=0 are plotted.
Of course we could restrict the z range so that z goes from (0, 1), but it is nice to be able to manipulate a model without changing the overall plotted region. When models become more complicated this method allows us to control individual components without altering other pieces.
Before we start creating trefoil knots, there is one last Mathematica option that needs to be discussed: PlotPoints. Notice how choppy and non-circular the bottom of our hemisphere looks in the image above—PlotPoints will fix this. The PlotPoints function can be thought of as the resolution of a 3D model. A higher PlotPoints value tells Mathematica to use more points to represent the plotted region. However, as we increase PlotPoints, we also increase computation time. Say we used a PlotPoints of 50 and the model was under-represented. We could double our resolution and set PlotPoints to 100, but remember we are in 3D space, so by doubling the number of points in all directions (x, y, and z) we increase our computation by 2*2*2*=8. In other words, doubling a model’s resolution increases computation time by a factor of 8. So let’s plot that same hemisphere with a PlotPoints of 100 and see what the bottom looks like.
Much better! Now that we have an understanding of RegionPlot3D and PlotPoints, it’s time to create some trefoil knots.
The main Mathematica function I wrote, inTinftube, defines the trefoil knot (the composition of our trefoil knot function with inverse stereographic projection explained above) by inputting points (x, y, z) and “knot thickness” and returning a single number. Inside the function it tests points using inequalities such that if the outputted number is less than 0, Mathematica includes the point in the plot, and if the number is greater than 0, Mathematica does not include the point in the plot. We also need to define a boundary condition, otherwise our model would stretch to infinity! So we can include more inequalities that points must satisfy such that our boundary is a cylinder of radius 3, height 6, and is centered at the origin. With these parameters selected, the results below depict our “standard” trefoil knot. This knot is the inverse image of a small disk around 0 in C to give the knot thickness—a visual description of this will be shown in the next section.
Thingiverse link: http://www.thingiverse.com/thing:243260
Open Book Decomposition, Fibrations, and Pages.
Now that we have our “standard/reference trefoil knot,” it is time to start adding fibrations. To do this, unravel the above trefoil so that it is a straight strand. Consider that cord the spine of a book. Now add in one page to the book; the page will connect to the spine along one edge. Now twist the cord back into the trefoil knot configuration—what does the page, i.e., knot fibration, look like? This idea is called an Open Book Decomposition.
We can visualize this by adding extra regions to the model in C before we apply our single function. To do this, I wrote another Mathematica function, inTinfpage, that takes in points and outputs a number; however, this time the function also requires an angle. This angle will define a ray in the plane starting at the origin that is rotated an angle in the mathematically positive direction. As before, we can have Mathematica plot points if the outputted number is below zero, but we want a page of some physical thickness (in order to 3D print). For most of my successful prints I have been using a page thickness of pi/6. So we can now include another “ray-function” and input an angle that is pi/6 larger than before and have Mathematica plot things that are greater than 0. We have now included another region in the plane. This process is much easier to see in the image below.
The circle is the radius of the trefoil knot, and the region in the first quadrant is our fiber with thickness. That’s the new region we want to include when using stereographic projection. Remember the picture above is the subset of C that we are taking inverse images of. We can now apply our same code to generate the following model.
Why stop at one extra region? We can add as many as we would like, and at pi/6 thickness, we should be able to fit 12 extra regions in our trefoil knot (since pi/6*12=2*pi). Some other examples are below, with the region in C shown on the left, and its inverse image (after applying stereographic projection) shown on the right.
We can now start to see the consequences of projecting our 4D function into R^3, which is why our knots are visually unlike typical trefoil knots.
In the next post we'll 3D print the models we have created...
Today's guest poster is Fred Hohman (fredhohman on Thingiverse), an undergraduate mathematics student at the University of Georgia, student of David Gay as well as my good friend Jason Cantarella. Fred is the designer of the beautiful "trefoil trumpet" we printed on Day 311, and in the next two posts he'll be walking us through the math and the Mathematica of a sort of "3D puzzle" based on this trefoil.
Hello MakerHome and MakerHome readers!
I am Fred Hohman, a rising senior Mathematics and Physics student at the University of Georgia. I have been working under Dr. David Gay in the Department of Mathematics at the University of Georgia since the beginning of the year, and I will be continuing my work until my graduation in May 2015.
Earlier in the summer I had the wonderful opportunity to meet Dr. Laura Taalman (mathgrrl) after her talk at MoMath on “Making Mathematics Real: Knot Theory, Experimental Mathematics, and 3D Printing.“ After chatting about math and 3D printing she asked me say some words about my undergraduate research at UGA. You may have seen already Dr. Taalman’s earlier post “Day 311 — Trumpet Trefoil,” in which she introduced my trefoil knot. If you have ever seen a standard trefoil knot you’ll notice that the trefoil that was depicted is a bit different.
The goal of this project is to create a 3D puzzle of the trefoil knot and its fibrations via 3D printing.
Let’s start with some theory.
Theory and Stereographic Projection.
Consider the following function from C^2 to C (we can think of this as a function from R^4 to R^2 - see the Wikipedia entries for real n-space and complex n-space for more information): this function sends a coordinate pair (u, v), where u and v are complex numbers, to the quantity (u+i*v)^2-(u-i*v)^3, where i = sqrt(-1). This particular function’s zero-set, a set of points {(u,v), …} such that (u+i*v)^2=(u-i*v)^3, generates a trefoil knot through infinity. By considering inverse images of certain subsets of C we will generate a trefoil knot given our function’s zero-set; however, this inverse image is a subset of C^2. To obtain our knot and understand its subsets better, we need a method to realize our object in R^3.
As a preliminary example, consider a sphere in R^3 sitting on a plane (think of a ball sitting on a table). From the top of the sphere (think North Pole), draw a line segment downward through the sphere and ending at the table. Notice that this line segment intersects both the sphere and table once. We can do this same line drawing method over and over to obtain a one-to-one correlation from the sphere to the plane, i.e., every point (well, minus the exact top of the sphere!) on the sphere can be mapped to the plane. This is called stereographic projection, and Henry Segerman (henryseg on Thingiverse) has created a fantastic 3D printed model illustrating this method:
If we have a point light source (smartphone camera flash) and place it at the top of this model, light rays will act as the line segments in the above example. If held at the correct height, we should see the Cartesian grid on the table. I always keep this model in my backpack to demonstrate to people stereographic projection—I recommend printing it out!
So stereographic projection is a function from the unit sphere in R^3 onto R^2, but recall that our function is defined in R^4. For us to embed our object in R^3, we use a generalized version of stereographic projection to go from the unit sphere in R^4 to R^3. With this tool, we can compose the inverse stereographic projection function with our function defined above. So our new function now goes from R^3 -> C.
If we take inverse images of subsets of C, we now have a function that goes from C -> C^2 = R^4 -> R^3, i.e., our single, final function takes in certain subsets of C and outputs subsets of R^3—exactly what we want!
Mathematica, Plotting, and Resolution.
To generate 3D computer models of the trefoil knots, I chose to use Mathematica. RegionPlot3D, a built-in Mathematica function, plots regions in 3D space using inequalities. In order to use RegionPlot3D, the user must specify the domain of values to plot over in the x, y, and z directions, as well as a mathematical inequality. As an example we can generate a sphere of radius 1 by the following code:
Mathematica will plot all points (x, y, z) such that each point falls within the considered domain and obeys the given inequalities—but we can take this further. We can use multiple inequalities using boolean operators such as AND and OR. As an example, let’s consider the same sphere defined above, but restrict the region so that only points above the plane z=0 are plotted.
Of course we could restrict the z range so that z goes from (0, 1), but it is nice to be able to manipulate a model without changing the overall plotted region. When models become more complicated this method allows us to control individual components without altering other pieces.
Before we start creating trefoil knots, there is one last Mathematica option that needs to be discussed: PlotPoints. Notice how choppy and non-circular the bottom of our hemisphere looks in the image above—PlotPoints will fix this. The PlotPoints function can be thought of as the resolution of a 3D model. A higher PlotPoints value tells Mathematica to use more points to represent the plotted region. However, as we increase PlotPoints, we also increase computation time. Say we used a PlotPoints of 50 and the model was under-represented. We could double our resolution and set PlotPoints to 100, but remember we are in 3D space, so by doubling the number of points in all directions (x, y, and z) we increase our computation by 2*2*2*=8. In other words, doubling a model’s resolution increases computation time by a factor of 8. So let’s plot that same hemisphere with a PlotPoints of 100 and see what the bottom looks like.
Much better! Now that we have an understanding of RegionPlot3D and PlotPoints, it’s time to create some trefoil knots.
The main Mathematica function I wrote, inTinftube, defines the trefoil knot (the composition of our trefoil knot function with inverse stereographic projection explained above) by inputting points (x, y, z) and “knot thickness” and returning a single number. Inside the function it tests points using inequalities such that if the outputted number is less than 0, Mathematica includes the point in the plot, and if the number is greater than 0, Mathematica does not include the point in the plot. We also need to define a boundary condition, otherwise our model would stretch to infinity! So we can include more inequalities that points must satisfy such that our boundary is a cylinder of radius 3, height 6, and is centered at the origin. With these parameters selected, the results below depict our “standard” trefoil knot. This knot is the inverse image of a small disk around 0 in C to give the knot thickness—a visual description of this will be shown in the next section.
Thingiverse link: http://www.thingiverse.com/thing:243260
Open Book Decomposition, Fibrations, and Pages.
Now that we have our “standard/reference trefoil knot,” it is time to start adding fibrations. To do this, unravel the above trefoil so that it is a straight strand. Consider that cord the spine of a book. Now add in one page to the book; the page will connect to the spine along one edge. Now twist the cord back into the trefoil knot configuration—what does the page, i.e., knot fibration, look like? This idea is called an Open Book Decomposition.
We can visualize this by adding extra regions to the model in C before we apply our single function. To do this, I wrote another Mathematica function, inTinfpage, that takes in points and outputs a number; however, this time the function also requires an angle. This angle will define a ray in the plane starting at the origin that is rotated an angle in the mathematically positive direction. As before, we can have Mathematica plot points if the outputted number is below zero, but we want a page of some physical thickness (in order to 3D print). For most of my successful prints I have been using a page thickness of pi/6. So we can now include another “ray-function” and input an angle that is pi/6 larger than before and have Mathematica plot things that are greater than 0. We have now included another region in the plane. This process is much easier to see in the image below.
The circle is the radius of the trefoil knot, and the region in the first quadrant is our fiber with thickness. That’s the new region we want to include when using stereographic projection. Remember the picture above is the subset of C that we are taking inverse images of. We can now apply our same code to generate the following model.
Why stop at one extra region? We can add as many as we would like, and at pi/6 thickness, we should be able to fit 12 extra regions in our trefoil knot (since pi/6*12=2*pi). Some other examples are below, with the region in C shown on the left, and its inverse image (after applying stereographic projection) shown on the right.
We can now start to see the consequences of projecting our 4D function into R^3, which is why our knots are visually unlike typical trefoil knots.
In the next post we'll 3D print the models we have created...
Friday, August 15, 2014
Day 354 - Forty-one Pentagonal Icositetrahedra
Today (August 15) I had the great pleasure and honor of attending the final convocation for the 2014 NYU GSTEM program. At this event, 41 young women who are rising high school seniors presented the work they did this summer interning at various science, technology, engineering, and mathematics departments. The presentations were incredible and if I hadn't known they were high school students I would have thought they were just finishing college and on their way to graduate school. Today the future looked very, very bright. Like, genius bright. We made them each a Pentagonal Icositetrahedron (see Day 197).
Thingiverse link: http://www.thingiverse.com/make:90906
Settings: Printed at 50% scale on a MakerBot Replicator 2 with .2mm layer height and raft but no support (hooray!). Print time was about 21 minutes a piece and they printed eight-up without problems.
Here are some of the are future geniuses looking at the 3D-objects we brought to the convocation:
Thingiverse link: http://www.thingiverse.com/make:90906
Settings: Printed at 50% scale on a MakerBot Replicator 2 with .2mm layer height and raft but no support (hooray!). Print time was about 21 minutes a piece and they printed eight-up without problems.
Here are some of the are future geniuses looking at the 3D-objects we brought to the convocation:
Thursday, August 14, 2014
Day 353 - Customizable hinge/snap Tetrahedron net
Today we modified Day 344's Cube net design to make a Tetrahedron net:
Here it is mostly folded up. This net is so small that it only folds well in one direction; in the other direction the edges of the faces keep the hinges from swinging open enough for the model to close all the way. The cube net, and all other larger nets, fold well both ways.
Thingiverse link: http://www.thingiverse.com/thing:440001
Settings: We optimized this design for printing on a Replicator 2 with .3mm layer height and no raft, no supports. If your printer is different then you may need different clearances in your model. You can use the Thingiverse link to open the model in Customizer and set your own side length, border width, hinge clearance, and snap tolerance.
Technical notes, platform/raft edition: These hinge/snap net models print best without a raft. You can print them with a raft, but it will take 50% as long and then another 25% longer for you to peel off the raft bits. (Note that although you can print these with rafts if for some reason you want/have to, you cannot print these models with supports or the hinges will not work correctly.) If you're printing on an acrylic build plate with PLA, like the standard plate that comes with the MakerBot Replicator 2, then you have an excellent build surface for printing without a raft. If you're printing with a glass platform on the Replicator, or with some other printers, then you may not be able to print without a raft. For me at least, PLA never sticks to the glass, and I need glass+tape+raft to make prints work on the glass build plate (see Day 214). In any case, make sure your build platform is very level before you try printing a large hinge/net model, or the outer pieces will be deformed and hinges and snaps may fail.
Technical notes, OpenSCAD edition: Using the same hinge, snap, poly_maker, and attach modules as on Day 344, we assembled the tetrahedron as follows:
// center triangle
union(){
poly_maker(sides=3);
attach(type=2,side=1,sides=3);
attach(type=2,side=2,sides=3);
attach(type=1,side=3,sides=3);
}
// next triangle
translate([ (length/tan(180/3)+jump)*cos(180/3),
(length/tan(180/3)+jump)*sin(180/3),
0])
rotate(180/3,[0,0,1])
union(){
poly_maker(sides=3);
attach(type=2,side=2,sides=3);
attach(type=1,side=3,sides=3);
}
// next next triangle
translate([ 0,
2*(length/tan(180/3)+jump)*sin(180/3),
0])
rotate(2*180/3,[0,0,1])
union(){
poly_maker(sides=3);
attach(type=1,side=2,sides=3);
attach(type=2,side=3,sides=3);
}
// next next next triangle
translate([ (length/tan(180/3)+jump)*cos(180/3),
3*(length/tan(180/3)+jump)*sin(180/3),
0])
rotate(3*180/3,[0,0,1])
union(){
poly_maker(sides=3);
attach(type=2,side=1,sides=3);
attach(type=2,side=2,sides=3);
}
Thingiverse link: http://www.thingiverse.com/thing:440001
Settings: We optimized this design for printing on a Replicator 2 with .3mm layer height and no raft, no supports. If your printer is different then you may need different clearances in your model. You can use the Thingiverse link to open the model in Customizer and set your own side length, border width, hinge clearance, and snap tolerance.
Technical notes, platform/raft edition: These hinge/snap net models print best without a raft. You can print them with a raft, but it will take 50% as long and then another 25% longer for you to peel off the raft bits. (Note that although you can print these with rafts if for some reason you want/have to, you cannot print these models with supports or the hinges will not work correctly.) If you're printing on an acrylic build plate with PLA, like the standard plate that comes with the MakerBot Replicator 2, then you have an excellent build surface for printing without a raft. If you're printing with a glass platform on the Replicator, or with some other printers, then you may not be able to print without a raft. For me at least, PLA never sticks to the glass, and I need glass+tape+raft to make prints work on the glass build plate (see Day 214). In any case, make sure your build platform is very level before you try printing a large hinge/net model, or the outer pieces will be deformed and hinges and snaps may fail.
Technical notes, OpenSCAD edition: Using the same hinge, snap, poly_maker, and attach modules as on Day 344, we assembled the tetrahedron as follows:
// center triangle
union(){
poly_maker(sides=3);
attach(type=2,side=1,sides=3);
attach(type=2,side=2,sides=3);
attach(type=1,side=3,sides=3);
}
// next triangle
translate([ (length/tan(180/3)+jump)*cos(180/3),
(length/tan(180/3)+jump)*sin(180/3),
0])
rotate(180/3,[0,0,1])
union(){
poly_maker(sides=3);
attach(type=2,side=2,sides=3);
attach(type=1,side=3,sides=3);
}
// next next triangle
translate([ 0,
2*(length/tan(180/3)+jump)*sin(180/3),
0])
rotate(2*180/3,[0,0,1])
union(){
poly_maker(sides=3);
attach(type=1,side=2,sides=3);
attach(type=2,side=3,sides=3);
}
// next next next triangle
translate([ (length/tan(180/3)+jump)*cos(180/3),
3*(length/tan(180/3)+jump)*sin(180/3),
0])
rotate(3*180/3,[0,0,1])
union(){
poly_maker(sides=3);
attach(type=2,side=1,sides=3);
attach(type=2,side=2,sides=3);
}
Wednesday, August 13, 2014
Day 352 - Center of mass demonstration
Today we printed designbynumbers' Center of mass manipulatives for calculus classes from Thingiverse. It worked very well and balanced wonderfully!
Thingiverse link: http://www.thingiverse.com/make:90962
Settings: Printed on a MakerBot Replicator 2 with .2mm layer height. We changed the infill to "linear" instead of "hexagonal" because the hexagon-filled one seemed not to balance quite right. With linear infill the balance was spot-on.
Thingiverse link: http://www.thingiverse.com/make:90962
Settings: Printed on a MakerBot Replicator 2 with .2mm layer height. We changed the infill to "linear" instead of "hexagonal" because the hexagon-filled one seemed not to balance quite right. With linear infill the balance was spot-on.
Tuesday, August 12, 2014
Day 351 - Impossible Menger Burr
After richgain's excellent guest posts walking us through Burr Tools on Day 348 and Day 349, we couldn't resist giving it a try. As I think we've established, I love Menger sponges and I'm kind of a jerk. So I made a burr puzzle that can never be assembled.
Thingiverse link: http://www.thingiverse.com/thing:439478
Settings: The red menger cube was printed on a Replicator 2 at .3mm layer height in 10 minutes, without raft or support, on an acrylic platform. The white cross was printed on another Replicator 2 (don't judge, they had a warehouse sale for the last remaining Rep2's and... well...) at .3mm layer height in 8 minutes, with raft and support on a glass platform with tape.
Technical notes, Burr Tools flavor: I have to give serious thanks and appreciation to the author of Burr Tools, Andreas Roever. Burr Tools has a lot of features that I haven't even attempted yet, including triangle and sphere grids and a whole lot more. And it's free. In addition it solves the puzzles you construct. And it's smart about it; for example, the menger+cross puzzle I made has a solution if you can get the cross into the cube. So it has an "assembly". But it doesn't have a "solution" because you can't actually perform the assembly. This is reported correctly by Burr Tools in the left column of the picture below. Very impressive and useful!
Thanks also go out to Derek Bosch, himself a creator of amazing and intricate puzzles, who wrote the code for the OSX port and also sent me a direct link to the most updated version of Burr Tools so I could run it on my Mac. Here's that link: http://sourceforge.net/projects/burrtools/files/latest/download .
Thingiverse link: http://www.thingiverse.com/thing:439478
Settings: The red menger cube was printed on a Replicator 2 at .3mm layer height in 10 minutes, without raft or support, on an acrylic platform. The white cross was printed on another Replicator 2 (don't judge, they had a warehouse sale for the last remaining Rep2's and... well...) at .3mm layer height in 8 minutes, with raft and support on a glass platform with tape.
Technical notes, Burr Tools flavor: I have to give serious thanks and appreciation to the author of Burr Tools, Andreas Roever. Burr Tools has a lot of features that I haven't even attempted yet, including triangle and sphere grids and a whole lot more. And it's free. In addition it solves the puzzles you construct. And it's smart about it; for example, the menger+cross puzzle I made has a solution if you can get the cross into the cube. So it has an "assembly". But it doesn't have a "solution" because you can't actually perform the assembly. This is reported correctly by Burr Tools in the left column of the picture below. Very impressive and useful!
Thanks also go out to Derek Bosch, himself a creator of amazing and intricate puzzles, who wrote the code for the OSX port and also sent me a direct link to the most updated version of Burr Tools so I could run it on my Mac. Here's that link: http://sourceforge.net/projects/burrtools/files/latest/download .
Monday, August 11, 2014
Day 350 - Triple Bubbles
When three bubbles intersect, they do so in a very specific way. Here's what it looks like:
Using the OpenSCAD code for this design included at the bottom of this post you can make your own bubble model with any three bubbles you like. The code will automatically position the bubbles correctly and create the correct surface components that intersect in the center of the model. Or, to print exactly the model above, use the Thingiverse link.
Thingiverse link: http://www.thingiverse.com/thing:438777
Settings: This is very large model that took up most of the build plate of a MakerBot Replicator 2 and printed at .2mm layer height with raft but no supports. It took many hours but we forgot to make a note of exactly how many! So, just, a lot.
Technical notes, math flavor: This model was requested by MoMath to use as a cake centerpiece for mathematician Jean Taylor's 70th birthday party. Jean Taylor famously proved that Plateau's Laws hold for minimal surfaces in her paper The structure of singularities in soap-bubble-like and soap-film-like minimal surfaces. According to Plateau's Laws, three bubbles will meet at 120-degree angles - just as in the center of the model shown above. However, the three surface components that meet at the 120-degree angle are not flat; they are curved. Each of the three components is a part of a larger sphere whose center lies outside of the bubbles. The three centers are shown by the points F, G, and H in the diagram below, taken from S.M. Blinder's Wolfram Demonstration Three Coalescing Soap Bubbles.
We used S.M. Blinder's Demonstration code to get the mathematical descriptions of the points F, G, and H given the radii of the three intersecting bubbles.
Technical notes, failure flavor: This model left a particularly large trail of fails; below is one that was designed with a much coarser mesh. The coarseness of the mesh left some gaps at the joins between the surfaces, which cased the model to separate. In addition we tried to print the entire top without supports, which caused the problem on the smallest sphere that led us to cancel the print. Most models can be made rather coarsely and still look fine, but this particular model needed a mesh with a very high degree of accuracy to even print correctly.
Using the OpenSCAD code for this design included at the bottom of this post you can make your own bubble model with any three bubbles you like. The code will automatically position the bubbles correctly and create the correct surface components that intersect in the center of the model. Or, to print exactly the model above, use the Thingiverse link.
Thingiverse link: http://www.thingiverse.com/thing:438777
Settings: This is very large model that took up most of the build plate of a MakerBot Replicator 2 and printed at .2mm layer height with raft but no supports. It took many hours but we forgot to make a note of exactly how many! So, just, a lot.
Technical notes, math flavor: This model was requested by MoMath to use as a cake centerpiece for mathematician Jean Taylor's 70th birthday party. Jean Taylor famously proved that Plateau's Laws hold for minimal surfaces in her paper The structure of singularities in soap-bubble-like and soap-film-like minimal surfaces. According to Plateau's Laws, three bubbles will meet at 120-degree angles - just as in the center of the model shown above. However, the three surface components that meet at the 120-degree angle are not flat; they are curved. Each of the three components is a part of a larger sphere whose center lies outside of the bubbles. The three centers are shown by the points F, G, and H in the diagram below, taken from S.M. Blinder's Wolfram Demonstration Three Coalescing Soap Bubbles.
We used S.M. Blinder's Demonstration code to get the mathematical descriptions of the points F, G, and H given the radii of the three intersecting bubbles.
Technical notes, failure flavor: This model left a particularly large trail of fails; below is one that was designed with a much coarser mesh. The coarseness of the mesh left some gaps at the joins between the surfaces, which cased the model to separate. In addition we tried to print the entire top without supports, which caused the problem on the smallest sphere that led us to cancel the print. Most models can be made rather coarsely and still look fine, but this particular model needed a mesh with a very high degree of accuracy to even print correctly.
Technical notes, resolution flavor: To get a fine enough resolution for successful printing, we had to use a lot of triangles in our mesh. The hard part was getting the interior surface segments to contain enough triangles, since they came from much larger spheres. The key to doing this was using very small numbers for the fragment angle and fragment size of the spheres:
fragA = 2; // fragment angle
fragS = 2; // fragment size
Here's what the mesh looks like in OpenSCAD:
Because of the high resolution needed to make components of this model intersect successfully, I am not putting its OpenSCAD code on the Thingiverse Customizer. I think it would hang or crash to try to run this online. If you're interested in making different bubble configurations then download OpenSCAD and run the code at the bottom of this post, changing the bubble radii as desired.
Technical notes, OpenSCAD flavor: This was one of the most difficult things that I've made in OpenSCAD. When MoMath asked me if I could design this triple-bubble model, my first reaction was that I had absolutely no idea how to do that, so probably not. But a bit of poking around on the web led me to the excellent triple-bubble Wolfram Demonstration, and they had already done all of the math! I tried to export the Wolfram object using Mathematica, but it was not the right kind of graphics object to allow an STL export. This meant that it had to be reconstructed from the ground up in OpenSCAD. Alas, this in turn meant that I really needed to understand all the mathematics in the code, and also translate the code from Mathematica syntax to OpenSCAD syntax. All this together with the need for high-resolution accuracy meant that this project took many days to put together and get working correctly.
The OpenSCAD code starts with any three radii for the bubbles and then positions the spheres correctly, computes the center coordinates of the larger spheres that determine the intersecting surface components, and then uses unions, differences, and intersections to output the correct sections of the three bubbles and thee surface components. Because it would be difficult to see the inside intersections if the bubbles were printed as full spheres, the final step is to cut off the top and bottom of the model. This also makes the model very easy to print.
// mathgrrl triple bubble
////////////////////////////////////////////////////////////////
// bubble radii
a = 60;
b = 56;
c = 44;
////////////////////////////////////////////////////////////////
// resolution parameters
th = .9; // thickness
fragA = 2; // fragment angle
fragS = 2; // fragment size
////////////////////////////////////////////////////////////////
// scale and render
intersection(){
build_bubbles();
cube([250,200,70],center=true);
}
////////////////////////////////////////////////////////////////
// translation coordinates
// based on code from Wolfram Mathematica Demonstrations Project
// http://demonstrations.wolfram.com/ThreeCoalescingSoapBubbles/
ab = sqrt(a*a+b*b-a*b);
ac = sqrt(a*a+c*c-a*c);
bc = sqrt(b*b+c*c-b*c);
f = 1/(1/b-1/a);
g = 1/(1/c-1/a);
h = 1/(1/c-1/b);
// translation coords for sphere b
xb = ab;
// translation coords for sphere c
xc = (pow(ab,2)+pow(ac,2)-pow(bc,2))/(2*ab);
yc = (-1/(2*ab))*
sqrt( -pow(ab,4)
-(pow(ac,2)-pow(bc,2))*(pow(ac,2)-pow(bc,2))
+2*pow(ab,2)*(pow(ac,2)+pow(bc,2)));
// translation coords for interface sphere f
bf = sqrt(pow(b,2)+pow(f,2)-b*f);
xf = ab+bf;
yf = 0;
// translation coords for interface sphere g
cg = sqrt(pow(c,2)+pow(g,2)-c*g);
xg = (ac*xc+cg*xc)/ac;
yg = (ac*yc+cg*yc)/ac;
// translation coords for interface sphere h
ch = sqrt(pow(c,2)+pow(h,2)-c*h);
xh = (-ch*xb+bc*xc+ch*xc)/bc;
yh = (bc*yc+ch*yc)/bc;
////////////////////////////////////////////////////////////////
// module for sphere parts and dividers
module build_bubbles(){
//first bubble shell fragment
difference(){
sphere_a(open=1,fudge=0); // start with first bubble shell
intersection(){ // take away the part of the shell
sphere_a(open=1,fudge=0); // that intersects the
union(){ // second and third bubbles
sphere_b(open=0,fudge=-th);
sphere_c(open=0,fudge=-th);
}
}
}
//second bubble shell fragment
difference(){
sphere_b(open=1,fudge=0); // start with second bubble shell
intersection(){ // take away the part of the shell
sphere_b(open=1,fudge=0); // that intersects the
union(){ // first and third bubbles
sphere_a(open=0,fudge=-th);
sphere_c(open=0,fudge=-th);
}
}
}
//third bubble shell fragment
difference(){
sphere_c(open=1,fudge=0); // start with third bubble shell
intersection(){ // take away the part of the shell
sphere_c(open=1,fudge=0); // that intersects the
union(){ // first and second bubbles
sphere_a(open=0,fudge=-th);
sphere_b(open=0,fudge=-th);
}
}
}
//interface between first and second
intersection(){
sphere_ab(open=1,fudge=0); // take only the arc of the circle
difference(){
sphere_a(open=0,fudge=0.1); // that intersects the first bubble
sphere_ac(open=0,fudge=-th); // but not the other interface
}
}
//interface between first and third
intersection(){
sphere_ac(open=1,fudge=0); // take only the arc of the circle
difference(){
sphere_a(open=0,fudge=0.02); // that intersects the first bubble
sphere_ab(open=0,fudge=-0.02); // but not the other interface
}
}
//interface between second and third
intersection(){
sphere_bc(open=1,fudge=0); // take only the arc of the circle
difference(){
sphere_b(open=0,fudge=0.02); // that intersects the second bubble
difference(){ // but not the other side of
sphere(100);
sphere_ac(open=0,fudge=0.02); // the other interface
}
}
}
}
////////////////////////////////////////////////////////////////
// modules for the spheres
// use open=1 for shell and open=0 for full sphere
module sphere_a(open,fudge){
translate([0,0,0])
difference(){
sphere(a+th/2+fudge,$fa=fragA,$fs=fragS);
sphere(open*(a-th/2+fudge),$fa=fragA,$fs=fragS);
}
}
module sphere_b(open,fudge){
translate([xb,0,0])
difference(){
sphere(b+th/2,$fa=fragA,$fs=fragS);
sphere(open*(b-th/2+fudge),$fa=fragA,$fs=fragS);
}
}
module sphere_c(open,fudge){
translate([xc,yc,0])
difference(){
sphere(c+th/2+fudge,$fa=fragA,$fs=fragS);
sphere(open*(c+-th/2+fudge),$fa=fragA,$fs=fragS);
}
}
////////////////////////////////////////////////////////////////
// modules for the interface spheres
// use open=1 for shell and open=0 for full sphere
module sphere_ab(open,fudge){
translate([xf,yf,0])
difference(){
sphere(f+th/2+fudge,$fa=fragA/2,$fs=fragS/2);
sphere(open*(f-th/2+fudge),$fa=fragA/2,$fs=fragS/2);
}
}
module sphere_ac(open,fudge){
translate([xg,yg,0])
difference(){
sphere(g+th/2+fudge,$fa=fragA/2,$fs=fragS/2);
sphere(open*(g-th/2+fudge),$fa=fragA/2,$fs=fragS/2);
}
}
module sphere_bc(open,fudge){
translate([xh,yh,0])
difference(){
sphere(h+th/2+fudge,$fa=fragA/2,$fs=fragS/2);
sphere(open*(h-th/2+fudge),$fa=fragA/2,$fs=fragS/2);
}
}
Subscribe to:
Posts (Atom)