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...
No comments:
Post a Comment