# Day 276 – Petal conformation of 6_2

## Day 276 – Petal conformation of 6_2

Day 276 – Petal conformation of 6_2 150 150 mathgrrl

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

\$fn=Sides;
scale(Scale)