# Definition of Tube as a Region

Bug introduced in 13.0.0 and fixed in 13.0.1 [CASE:4894156]

In version 13, Tube is a recognized region. E.g., RegionQ[Tube[{{0, 0, -h}, {0, 0, h}}, r]] returns True. However, it's not clear what the precise definition of the region is. Comparing with a cylinder, suggests that a Tube region from a single line segment is the surface of a cylinder, but with hemispherical caps:

 Graphics3D[{Style[Tube[{{0, 0, -1}, {0, 0, 1}}, 1/2],
Opacity[0.5, Red]], Cylinder[{{0, 0, -1}, {0, 0, 1}}, 1/2]}]


But the area of the tube is not what I expect from that of a cylinder and the caps:

Simplify[Area[Tube[{{0, 0, -h}, {0, 0, h}}, r]], h > 0]


gives

4 \[Pi] (h + r^2)


which adds different physical quantities: a length (h) and an area (r^2).

Compare to the surface area of a cylinder:

Simplify[SurfaceArea[Cylinder[{{0, 0, -h}, {0, 0, h}}, r]], h > 0]


which gives

2 \[Pi] r (2 h + r)


The difference in areas between Tube and Cylinder suggests the tube is not the surface of the cylinder with circular ends replaced by hemispheres.

The area of the tube region also differs from discretizing a graphics:

With[{reg = Tube[{{0, 0, -1}, {0, 0, 1}}, 0.5]},
{Area[reg], SurfaceArea[BoundaryDiscretizeGraphics[reg]]}
]


gives different values for the tube region and discretized graphics:

{15.708, 9.32718}


To find a definition of the Tube region, I tried

RegionConvert[Tube[{{0, 0, -h}, {0, 0, h}}, r], "Implicit"]


but that does not evaluate. In contrast, RegionConvert does work for a cylinder.

Is the difference between Tube and Cylinder just a problem with the evaluation of Area? Or is Tube as a region something different than as it appears as a graphics?

• Tube is a complex object compare to CapsuleShape. Volume[CapsuleShape[{{0, 0, -h}, {0, 0, h}}, r]] Jan 9, 2022 at 0:59
• The title: Is "Region" literal or not? Jan 9, 2022 at 14:21
• 4 \[Pi] (h + r^2) is my new favourite surface area formula, great work Mathematica!
– Joe
Jan 9, 2022 at 18:12
• CapsuleShape, which is a filled-in version of this tube, gives the same surface area: Simplify[SurfaceArea[CapsuleShape[{{0, 0, -h}, {0, 0, h}}, r]], h > 0] gives 4 \[Pi] (h + r^2)
Jan 19, 2022 at 22:34

I think you've found a bug! I think different parts of Mathematica deal with Tube differently.

Note that DiscretizeRegion thinks Tube is degenerate: evaluate DiscretizeRegion[Tube[]] for an error message. This suggests to me the reason for the mixing of areas and lengths in the Area output—some kind of degeneracy. (By the way, it's not only Area that doesn't work—Area's functionality likely comes through RegionMeasure, and that gives the same bizarre result.)

A workaround: However, RegionMember seems to work "as expected" and produce a good tube. Thus we can use this in conjunction with ImplicitRegion to make our own tube (with memoization as long as there are no messages, so we don't always have to recompute; not sure this actually needs it, though, as it seems pretty fast):

fixedTube[args___] :=
Module[{tube},
(fixedTube[args] = tube) /;
Check[(tube =
ImplicitRegion[RegionMember[Tube[args], {x, y, z}], {x, y, z}]); True,
False]]


(See DiscretizeRegion @ fixedTube[] to be convinced that this works.)

Note that this produces a filled-in 3D tube (as opposed to just its surface). This seems different than the region Mathematica considers Tube[] to refer to by itself!

RegionDimension[fixedTube[]] (* 3 *)

RegionDimension[Tube[]]      (* 2 *)


This is weird, because ImplicitRegion should essentially be the inverse of RegionMember. So I suspect this is a bug, and that Mathematica is mistakenly treating Tube one way in some part of its code but not in another.

• (+1) Have you reported this to the support? Jan 9, 2022 at 5:10
• DiscretizeGraphics also thinks that Tube[] is a 2D region. Jan 9, 2022 at 5:12
• ImplicitRegion gives a full region because RegionMember considers interior points part of the region, e.g., RegionMember[Tube[{{0, 0, -1}, {0, 0, 1}}, 1/2], {0, 0, 0}] returns True. As you note, inconsistent definition among different region functions.
Jan 10, 2022 at 20:58

The original bug is fixed in version 13.0.1:

Simplify[Area[Tube[{{0, 0, -h}, {0, 0, h}}, r]], h > 0]

4 Pi r (h + r)


Which equals to

Simplify[Area[Sphere[{0, 0, 0}, r]] + 2 h Perimeter[Disk[{0, 0}, r]]]

4 Pi r (h + r)


And also equals to

Simplify[SurfaceArea[Cylinder[{{0, 0, -h}, {0, 0, h}}, r]] - 2 Area[Disk[{0, 0}, r]] +
Area[Sphere[{0, 0, 0}, r]], h > 0]

4 Pi r (h + r)