Given a surface f(x,y,z)=0, how would you determine whether or not it’s a surface of revolution, and find the axis of rotation?

The special case where f is a polynomial is also of interest.

A few ideas that might lead somewhere, maybe:

(1) For algebra folks:Surfaces of the form z = g(x^2 + y^2) are always surfaces of revolution. I don’t know if the converse is true. If it is, then we just need to find a coordinate system in which f has this particular form. Finding special coordinate systems that simplify things often involves finding eigenvalues. You use eigenvalues to tackle the special case of quadric surfaces, anyway.

(2) For differential geometry folks:Surfaces of revolution have a very special pattern of lines of curvature. One family of lines of curvature is a set of coaxial circles. I don’t know if this property characterizes surfaces of revolution, but it sounds promising.

(3) For physicists & engineers:The axis of rotation must be one of the principal axes for the centroidal moments of inertia, according to physics notes I have read. So, we should compute the centroid and the inertia tensor. I’m not sure how. Then, diagonalize, so eigenvalues, again. Maybe this is actually the same as idea #1.

(4) For classical geometry folks:What characterizes surfaces of revolution (I think) is that every line that’s normal to the surface intersects some fixed line, which is the axis of rotation. So, construct the normal lines at a few points on the surface (how many??), and see if there is some line L that intersects all of these normal lines (how?). See this related question. If there is, then this line L is (probably) the desired axis of rotation. This seems somehow related to the answers given by Holographer and zyx.Why is this is interesting/important? Because surfaces of revolution are easier to handle computationally (e.g. area and volume calculations), and easy to manufacture (using a lathe). So, it’s useful to be able to identify them, so that they can be treated as special cases.

The question is related to this one about symmetric surfaces, I think. The last three paragraphs of that question (about centroids) apply here, too. Specifically, if we have a bounded (compact) surface of revolution, then its axis of rotation must pass through its centroid, so some degrees of freedom disappear.

If you want to test out your ideas, you can try experimenting with

f(x,y,z) = -6561 + 5265 x^2 + 256 x^4 + 4536 x y – 1792 x^3 y + 2592 y^2 +

4704 x^2 y^2 – 5488 x y^3 + 2401 y^4 + 2592 x z – 1024 x^3 z –

4536 y z + 5376 x^2 y z – 9408 x y^2 z + 5488 y^3 z + 5265 z^2 +

1536 x^2 z^2 – 5376 x y z^2 + 4704 y^2 z^2 – 1024 x z^3 +

1792 y z^3 + 256 z^4

This is a surface of revolution, and it’s compact. Sorry it’s such a big ugly mess. It was the simplest compact non-quadric example I could invent.If we rotate to a (u,v,w) coordinate system, where

\begin{align}

u &= \tfrac{1}{9}( x – 4 y + 8 z) \\

v &= \tfrac{1}{9}(8 x + 4 y + z) \\

w &= \tfrac{1}{9}(-4 x + 7 y + 4 z)

\end{align}

then the surface becomes

u^2 + v^2 + w^4 – 1 = 0

which is a surface of revolution having the w-axis as its axis of rotation.

**Answer**

You can reduce it to an algebraic problem as follows:

The definition of a surface of revolution is that there is some axis such that rotations about this axis leave the surface invariant. Let’s denote the action of a rotation by angle \theta about this axis by the map \vec x\mapsto \vec R_\theta(\vec x). With your surface given as a level set f(\vec{x})=0, the invariance condition is that f(\vec R_\theta(\vec x))=0 whenever f(\vec{x})=0, for all \theta.

In particular, we can differentiate this with respect to \theta to get \vec\nabla f(\vec R_\theta(\vec x))\cdot \frac{\partial}{\partial\theta}\vec R_\theta(\vec x)=0, which at \theta=0 gives \vec\nabla f(\vec x)\cdot \vec k(\vec x)=0, where \vec k(\vec x)=\left.\frac{\partial}{\partial\theta}\vec R_\theta(\vec x)\right|_{\theta=0} is the vector field representing the action of an infinitesimal rotation. (If the language of differential geometry is familiar, this is a Killing vector field).

So with this language established, what we need to check is whether there is any Killing field \vec k(\vec x) associated to a rotation, which is orthogonal to the gradient of f everywhere on the surface (i.e., whenever f(\vec x)=0). In fact, this will be not just necessary, but also sufficient, since (intuitively) any rotation can be built from many small ones.

Luckily, it’s quite straightforward to write down the most general Killing field: if \vec x_0 is a point on the axis of rotation, and \vec a a unit vector pointing along the axis, we have \vec k(\vec x)=\vec a \times (\vec x-\vec x_0). (Note that this is a degenerate parametrization, since we can pick any point on the axis, corresponding to shifting \vec x_0 by a multiple of \vec a, and also send \vec a to -\vec a, to give the same rotation).

To summarize: the question has been recast as “are there any solutions \vec x_0, \vec a to \vec a \times (\vec x-\vec x_0)\cdot\vec\nabla f(\vec x)=0, which hold for all \vec x such that f(\vec x)=0?”.

(You could also write the equation as \det[\vec a, \, \vec x-\vec x_0, \,\vec\nabla f(\vec x)]=0).

For your example, I got Mathematica to use this method. I let \vec x_0=(x_0,y_0,0), taking z_0=0 to remove some degeneracy, and \vec a=(a_x,a_y,a_z), giving 5 unknowns for the axis. I then found four points on the surface, by solving f(x,y,z)=0 with y=z=0 and x=z=0. Then I got it to solve \vec a \times (\vec x-\vec x_0)\cdot\vec\nabla f(\vec x)=0 for the four points, and |\vec a|^2=1 (5 equations for the 5 unknowns), getting a unique solution up to the sign of \vec a. I then substituted the solution into \vec a \times (\vec x-\vec x_0)\cdot\vec\nabla f(\vec x) for general \vec x, getting zero, so the solution indeed gave an axis of revolution. It is simplified in this case because all the level sets of f give a surface of revolution about the same axis, so this last step did not require assuming f(\vec x)=0.

**Attribution***Source : Link , Question Author : Community , Answer Author : Holographer*