Welcome to MakerHome

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

Friday, January 24, 2014

Day 151 - Fourier and tritangentless trefoil knots

Continuing our collection of trefoil knots, today we printed a trefoil in a Fourier-(1,1,2) knot conformation and a trefoil knot in a tritangentless conformation. In other words, the first trefoil knot in the picture below is a curve traced out by a collection of cosine functions (1 in the x-coordinate, 1 in the y-coordinate, and 2 in the z-coordinate), and the second has the property that no plane is tangent to three places on the curve at the same time (making this a rocking/rolling knot as seen on Day 110).

STL file for Fourier-(1,1,2): http://www.geekhaus.com/makerhome/day151_trefoil_fourier112_40_25_3.stl
STL file for tritangentless: http://www.geekhaus.com/makerhome/day151_trefoil_tritangentless_40_25_3.stl
Thingiverse link: http://www.thingiverse.com/thing:234107

Settings: MakerWare .3mm/low in 20-25 minutes per knot, with the minimum-support custom slicing profile for knots described on Day 110.

Technical notes, math flavor: A Fourier-(1,1,2) knot is one that can be parametrized as
x = a cos(nt + p) 
y = b cos(mt + q)
z = c cos(jt + r) + d cos(kt + s)
These equations are from the paper Torus knots are Fourier-(1,1,2) Knots by Jim Hoste at Pitzer College.  Here a, b, c, dp, q, r, and s can be any real numbers, and n, m, j, and k are integers. If d=0 then the parametrization is said to be a Fourier-(1,1,1) knot, which is also known as a Lissajous knot.  It is known that torus knots do not have Lissajous parametrizations (for more information see this page from Lee Stemkoski at Adelphi University).

The tritangentless conformation is a variant of the parametrization of the trefoil that appears in the paper Trefoil knots without tritangent planes by H.R. Morton at the University of Liverpool. For more information see Day 110, and for the explicit equations see the OpenSCAD code below.

Technical notes, OpenSCAD flavor: The code below was based on kitwallace's code from his Rolling Knot on Thingiverse. It's slow to render with F6, taking nearly a half an hour to get a model with step size 3 (which is 120 steps). The code is written so that you can size your knot before setting the strand thickness, which allows us to scale up models without affecting the thickness of the strand.

// mathgrrl parametric knots - fourier and tritangentless trefoils
// tubify module based on tube module from kitwallace
// remove comments for the one you want to compile

// 3_1 tritangentless conformation
// http://blms.oxfordjournals.org/content/23/1/78.full.pdf
a = 0.8;
b = sqrt (1 - a * a);
function f(t) =  
   [ 8.7 * a * cos (3 * t) / (1 - b* sin (2 *t)),
     8.7 * a * sin( 3 * t) / (1 - b* sin (2 *t)),
     8.7 * 1.8 * b * cos (2 * t) /(1 - b* sin (2 *t))
// create the knot with given radius and step
tubify(2.5, 3, 360);

// trefoil 32 as Fourier-(1,1,2)
// http://arxiv.org/pdf/0708.3590v1.pdf
// note torus knots are not Lissajous (1,1,1)
// scaled to 40mm before tubifying
function f(t) = 
[ 9*1.3*cos(3*t), 
 9*1.5*cos(2*t + 30), 
 9*(1.3*cos(3*t + 90) + .9*cos(-t + 30*2 - 45/2))
// create the knot with given radius and step
tubify(2.5, 3, 360);

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


  1. nop head has developed an approach to tube construction using the experimental concat feature available in the latest openscad snapshot . It constructs the tube as a single polyhedron. I've applied it to these two knots and code is in github
    It renders the second knot with a step of 0.5, $n=20 in .... wait for it.... 30 seconds! genius!

    1. WOW! I can't wait to see that, I will take a look today and try it out.