# Twisted Torus (Parametric)

I’m trying to replicate the “twisted torus” displayed here: Chromatic ice cube 🌈🧊 : generative (not the moving cube, just the main rotating torus shape)

I got close with the Gray’s Klein bottle parametric equations here: Toroidal Nature

I think the main difference is that Gray’s klein bottle sweeps a figure 8 around a circular path, whereas the Reddit reference link looks like it sweeps a square or something, but I’m not sure how to map that difference to parametric equations. Any help is much appreciated!

Here’s the shape I have so far, notice the “ribs” which I am trying to get rid of (they are caused by the figure 8 mentioned above):

Here is my code for the geometry of the above:

``````const surface = (u: number, v: number, target: Vector3) => {
const a = 4,
n = 3,
m = 2;

const i = (n * u) / 2,
j = (m * u) / 2,
k = Math.sin(2 * v);

const x = (a + Math.cos(i) * Math.sin(v) - Math.sin(i) * k) * Math.cos(j),
y = (a + Math.cos(i) * Math.sin(v) - Math.sin(i) * k) * Math.sin(j),
z = Math.sin(i) * Math.sin(v) + Math.cos(i) * k;

target.set(x, y, z);
};

const geometry = new ParametricGeometry(surface, 100, 100);
``````

Is this relatively close to what you need:

https://codepen.io/boytchev/full/qBLKpjx

There are some options for modifications:

• change line 46: `n=10``n=50` to get sharper edges
• change line 47: `t=1.5``t=5` to get more twists

5 Likes

@PavelBoytchev that is EXACTLY what I’m looking for. Thank you so much, you’ve made my day!

1 Like

pretty ~~~

2 Likes

How did you derive the parametric equations?

This is called Math.

I started with a torus. Its parametric equation does two circles – one big circle along the whole torus (using u as parametric angle) and one small circle across the tube (using v as parametric angle).

``````x = (R+r*cos(v)) * Math.cos(u)
y = (R+r*cos(v)) * Math.sin(u)
z = r*sin(v)
``````

Then I changed the radius r of the small circle so that it is not a circle, but a superellipse. A super ellipse can make a smooth transition from a circle to a square, so instead of a constant radius r, I used:

``````r = (cos(v)**n + sin(v)**n)**(-1/n)
``````

Finally, I added the twist – this is u and v are angles that go along the two circles, and I made one of the angle to be added to the other angle by a factor t, so instead of cos(v) and sin(v) I used:

``````cos(v+t*u)
sin(v+t*u)
``````

Thus the overall equation looks like this (R=4):

``````r = (cos(v)**n + sin(v)**n)**(-1/n)
x = (4 + r*cos(v+t*u)) * cos(u)
y = (4 + r*cos(v+t*u)) * sin(u)
z = r*sin(v+t*u)
``````

You can get all the shapes above by simply changing t and n:

• torus with circular tube: t=0, n=2
• torus with square tube: t=0, n=10
• square torus with a twist: t=1.5, n=10
5 Likes