# Puzzle about 6 infinite cylinders in space

You have 6 infinitely long cylinders (tubes) with the same radius R. Can you arrange them in space in a way that every cylinder touches the other 5? By touching, I mean have a common point or a line. You can't deform them.

By the way I don't know the actual answer. This puzzle came to me after the same puzzle but with cylinders of finite length. And yes, if cylinders have finite length you can arrange them in such way, with one remark: cylinders can touch their bottoms.

• I don't know what is meant by 'eternal'. – Jiminion Mar 31 at 14:22
• @Jiminion, I assumed 'infinitely long'. – MacGyver88 Mar 31 at 14:33
• Does this answer your question? How do I arrange pencils so they all touch each other? – StephenTG Mar 31 at 14:37
• @StephenTG That question is not a duplicate because it uses cylinders of finite length, and the solutions actually take advantage of that fact. – Jaap Scherphuis Mar 31 at 15:29

There has been some mathematical research done on this subject, and it turns out that:

7 mutually touching infinite cylinders is possible

as shown in this paper by Sándor Bozóki, Tsung-Lin Lee, and Lajos Rónyai. The paper was also discussed in for example Huffpost.

For 6 cylinders you can of course just take either of the 7-cylinder solutions in that paper and remove any one cylinder. There are likely many more 6-cylinder solutions, but unfortunately I don't know of one that is simple to describe.

Here's a Sage / Python program which creates a 3D plot of the second solution from the paper by Bozóki, Lee, and Rónyai. The plot is interactive (using three.js), so you can pan, zoom, and rotate the camera, using the mouse, or on a touch screen. This makes it easier to verify that the cylinders are actually mutually touching.

""" Seven mutually touching (infinite) cylinders
From https://www.sciencedirect.com/science/article/pii/S0925772114000819
"""

data = [
[
2.075088491891,
-2.036516392124,
-0.030209763440,
0.599691085438,
],[
-2.688893665930,
4.070505903499,
0.184499043058,
0.426965115851,
],[
-4.033142850644,
-2.655943449984,
0.251380280590,
0.516678258430,
],[
6.311134419772,
-5.229892181735,
-0.474742889365,
1.230302197822,
],[
3.914613907006,
-7.881492743224,
1.698198197367,
-1.164062857743,
]]

ps = [[0,0,-1], [0,0,1]]
ps += [row[:2] + [0] for row in data]

ws = [[1,0,0], [0,1,0]]
ws += [row[2:] + [1 - sum(row[2:])] for row in data]

colors = ["white", "grey", "brown",
"yellow", "red", "blue", "green"]

s0, s1 = -15, 35
def cyl(p, w, color):
p0 = [u + s0*v for u, v in zip(p, w)]
p1 = [u + s1*v for u, v in zip(p, w)]
return line3d([p0, p1], radius=1, color=color)

show(sum(cyl(p, w, c) for p, w, c in zip(ps, ws, colors)), frame=False)


Here's a live version of the script, running on the SageMathCell server.

You can adjust the end points of the cylinders by changing the values of the s0 and s1 parameters.

I've made a minor improvement to the script. It now normalises the lengths of the w vectors to 1, so all the cylinders have the same length. Please see the script link for details.

• Very beautiful, thank you. – Евгений Павлов Apr 2 at 8:40
• I'm glad you like it, @Евгений. I just updated the script, so now all the cylinders have the same length. – PM 2Ring Apr 2 at 10:32