# How can I draw a hyperboloid given its generatrix?

I want to see how a hyperboloid of revolution is generated by its generatrix, i.e. by rotating one (say the one passing point $(1,0,0)$ and $(0,1,1)$) of the skew lines around another (say the z axis).

My trial:

Manipulate[
Show[
ParametricPlot3D[
{Sqrt[t^2 + (t + 1)^2] Cos@θ, Sqrt[t^2 + (t + 1)^2] Sin@θ, 1 + t},
{t, -1, 1}, {θ, 0, β},
BoxRatios -> {1, 1, 1}, PlotRange -> {{-2, 2}, {-2, 2}, {0, 2}}],
ParametricPlot3D[{1 - t, 1 + t, 1 + t}, {t, -1, 1}]
],
{β, 0.1, 2 π}
]


However, the generatrix $(1 - t, 1 + t, 1 + t)$ doesn't match the hyperboloid. So how can I do it correctly?

• Your question isn't clear to me but I suggest that you look at, for example, "Generating a Hyperboloid by Rotating a Line" from the Wolfram Demonstrations Project. Dec 11, 2013 at 12:30
• @Tangshutao Hi could you please tell your question in Chinese to me in the chat room? Dec 11, 2013 at 20:43
• @Silvia,抱歉，英语不好，我是想看通过（1，0，0）和（0，1，1）的空间直线绕z轴旋转的过程，看看它是怎么形成一个曲面
– xyz
Dec 12, 2013 at 4:21
• @Tangshutao I've edited your question according to your description. Please feel free to improve it if I misrepresented your meaning. If you feel ok, you can apply reopen your question. btw. I think MikeLimaOscar's link should have well answered it. Dec 12, 2013 at 11:38
• @Silvia,+1,That's my thought！
– xyz
Dec 12, 2013 at 13:42

Wolfram example is quite slow, this is simple example with better performance. Since you want to use point positions, I've also added InputFields for this purpose:

DynamicModule[{b1, b2, a, ds},
Row[{
Graphics3D[{
Thick, Black, DotDashed, Line[{{0, 0, 2}, {0, 0, -2}}], Red,
{Dynamic@GeometricTransformation[
{Tube[{b1, b2}, .03],
Line@{b1, {0, 0, b1[[3]]}}, Line@{b2, {0, 0, b2[[3]]}}},
RotationTransform[a Degree, {0, 0, 1}]
]},
Thick, Orange, Dashing@1, Dynamic@ds[[ ;; IntegerPart[a/10]]]

}, PlotRange -> 1.5, ImageSize -> 300, Boxed -> False, FaceGrids -> {{0, 0, -1}}]
,
Column[{Slider[Dynamic@a, {0, 350, 2}],
InputField[Dynamic@b1],
InputField[Dynamic@b2]}, Center]}],

Initialization :> (
b1 = {1, 1, -1}; b2 = {-1, 1, 1}; a = 1;
ds := Table[Rotate[Line@{b1, b2}, a1 Degree, {0, 0, 1}], {a1, 0, 350, 10}];
)]


Modifying Silvia's code:

Manipulate[

ParametricPlot3D[
Evaluate[(RotationTransform[th, {0, 0, 1}].RotationTransform[t1, {1, 1, 0}]
)@{1, 1, t}],
{t, -2, 2}, {th, 0, 2 \[Pi]},PlotRange -> 2.5, ImageSize -> 500,
Boxed -> False, FaceGrids -> {{0, 0, -1}}, PlotStyle -> None,
MeshStyle -> Thick, Mesh -> {0, 50}
],
{t1, 0, Pi, .05}]


• @Tangshutao I've added another example, it might be quite illustrative.
– Kuba
Dec 12, 2013 at 21:02
• Love the envelope! In the old days, this property was amply demonstrated by running a ruler through a plaster model of the one-sheet hyperboloid. What you have is the modern take. :) Jun 17, 2015 at 9:46
• @J.M. Sounds nice, I wish I had such examples at school.
– Kuba
Jun 17, 2015 at 10:02
• I think anybody with enough willingness, a Mathematica installation, and a working 3D printer should be able to experience the "old-school" demo. :) Jun 17, 2015 at 10:36

Also a direct coordinate transformation from $(x,y,z)$ to $(t,\theta,z)$:

ParametricPlot3D[Evaluate[
RotationTransform[θ, {0, 0, 1}]@
{1 - t, t, t}
], {t, -1, 2}, {θ, 0, 2 π}]


In fact, as long as you keep the tranform parameters away from $t$, the results will always be ruled surface (and the hyperboloid of one sheet is doubly ruled surface):

ParametricPlot3D[Evaluate[
RotationTransform[0.3, {Sin[10 θ], 3 Cos[θ], 4 Sin[θ]}]@
RotationTransform[θ, {0, 0, 1}]@
{1 - t, t, t}
], {t, -1, 1}, {θ, 0, 2 π},
PlotPoints -> 50, Axes -> False, Boxed -> False, Lighting -> "Neutral"]


One-liner:

n = 100; h = 1; r = 1; φ = 0.9 π;

Graphics3D@Line@Transpose[#, {2, 3, 1}] &@{{r Sin[#], r Cos[#], 0 # - h},
{r Sin[# - φ], r Cos[# - φ], 0 # + h}} &[2 π N@Range[n]/n]


A small fun with it: the hyperbolic Shukhov Tower

n = 16;
h = 5.0;
k = 5;
m = 3;
p = 1.5;

Graphics3D@Line@Flatten[#, {{1, 4}, {2}, {3}}] &@Table[{
{(t - 1)^p Sin@RotateLeft[#, m], (t - 1) Cos@RotateLeft[#, m],0 # - h (t - 1)^p},
{t^p Sin[#], t Cos[#], 0 # - h t^p},
{t^p  Sin@RotateRight[#], t Cos@RotateRight[#], 0 # - h t^p},
{(t - 1)^p Sin@RotateRight[#, m + 1], (t - 1) Cos@RotateRight[#, m + 1],
0 # - h (t - 1)^p}}, {t, k}] &[2 π N@Range[n]/n]


• Everything's a one-liner if you have a wide enough screen ;)
– rm -rf
Dec 12, 2013 at 15:11