Final Project: Steven Duvall
For our final project, we were tasked with utilizing a 3D printer to create an object, in an area of our interest, to give back to the community. Due to the fact that a large majority of my interests are less-tangible than others, such as mathematics, video games, and computer science, finding something that I would be able to give back to a community was somewhat challenging. So, in order to come up with an idea, I thought back to what got me interested in Computer Science, and this was the topic of Lindenmayer Systems, and more specifically, space filling curves. A Lindenmayer System is a string of symbols in which there are production rules on how the string is transformed for each iteration. For example, if an initial string was “AB” and the rule of transformation was (A -> AB) and (B -> A), then the resulting string after a single transformation is “ABA”. This type of system is ideal to create fractals due to its recursive nature. One of the space filling curves that I found the most interesting was the Hilbert Curve, and the first five iterations (of my own implementation) are shown below (Where the color shows the progression of the curve):
While the 2D version of this curve interested me, what really interested me was the ability for this curve to be used as a 3D space filling curve. Once I found a topic that I could potentially design and print, I needed to find a use for such a design, rather than strictly being able to design it, and for this reason I decided to see if my Intro CS professor, Dr. Havill, could potentially have use for a 3D Hilbert Curve. After meeting with Dr. Havill, there were several ideas pitched back and forth, and one that was really interesting was for me to design a replica of George Stibitz’s ‘Model K’ bit adder. I initially thought this was a great idea, as I did not know that such an important piece of Computer Science history was present at Denison, and thought it would be great to create a replica that was able to be touched and viewed more closely. Unfortunately, this project did not fully utilize the advantages a 3D printer possess in terms of manufacturing capabilities, so I decided to head back to realizing a 3D Hilbert Curve (which I was still interested in designing). Now that I returned to the designing of a 3D fractal, it occurred to me that using a normal 3D modeling software would be extremely time consuming, so luckily around this time, our class was introduced to OpenSCAD. OpenSCAD is a 3D mesh generator that creates objects and shapes based off of code rather than altering objects manually using shaping tools, which implied that it was perfect for creating objects based off of recursion. So, after watching several tutorial videos on using OpenSCAD, I began implementing an algorithm to generate a 3D Hilbert curve. While implementing the algorithm was not too troublesome, what was the most time consuming was creating a cube that would translate along the path created by the algorithm, and thus creating the final Hilbert Curve. For some reason I was unable to get the cube to translate all of the way to each corner of the cube, and thus, there were parts of the curve that were disconnected. While it took me forever to fix this, I eventually decided to create a new cube for each one of these corners rather than translating a single cube along the path. The final design files are embedded below:
After the designs were finished, I attempted to print all three of these, but ran into one problem. Due to the fact that so many parts of these curves are are unsupported below them, the entire cube was integrated with supports, essentially making the final print a solid cube. While this was not a problem with the first, and simplest, Hilbert Curve, the other two were nearly impossible to print without supports, and let alone break all of the supports off without breaking the entire print. So, rather than risk breaking the entire print, I decided to leave the 3D curves encased in their supports, and most likely order the final Hilbert Curves from Shapeways, where there would be no supports in the final print. Overall, the design process of these curves were rather intensive, but along the way I did get to design an object not only in my field of study, but also a personal interest, as well as learn a brand new tool in designing 3D meshes. (Photos to come of final Shapeway prints).