# SurfaceOfRevolution

Back to documentation index.

### SurfaceOfRevolution(curve, minval, maxval, [axis])

A surface evaluator object for a surface of revolution, which results by revolving a two-dimensional curve around an axis.

This class is considered a supplementary class to the Public Domain HTML 3D Library and is not considered part of that library.

#### Parameters

• `curve` (Type: Object)
A curve evaluator object that describes a 2-dimensional curve to rotate about the axis of rotation, as specified in the "axis" parameter. The curve's X coordinates correspond to elevation, and its Y coordinates correspond to radius.

If the curve function draws a curve that goes both above and below the axis of rotation, such as a circle or ellipse, the V coordinates given in minval and maxval must restrict the curve definition to no more than half of the curve.

• `minval` (Type: number)
Smallest V coordinate.
• `maxval` (Type: number)
Largest V coordinate. If minval is greater than maxval, both values will be swapped.
• `axis` (Type: Array.<number>) (optional)
Axis of rotation, around which the curve will be rotated to generate the surface of revolution. If null, undefined, or omitted, the positive Z axis (0, 0, 1) will be the axis of rotation. This parameter is a 3-element array describing the X, Y, and Z coordinates, respectively, of a 3D point. The axis of rotation will run in the direction from the origin to the point given in this parameter. This parameter need not be a unit vector.

### Methods

• endPoints
• evaluate
Finds the coordinates of the given point of this surface.
• fromFunction
Creates a surface evaluator object for a surface of revolution whose curve is the graph of a single-variable function.
• torus
A surface evaluator object for a torus, a special case of a surface of revolution.

### SurfaceOfRevolution#evaluate(u, v)

Finds the coordinates of the given point of this surface.

#### Parameters

• `u` (Type: number)
U coordinate of the surface to evaluate.
• `v` (Type: number)
V coordinate of the surface to evaluate.

#### Return Value

An array containing the coordinates of the position at the given point. It will have three elements. (Type: Array.<number>)

### (static) SurfaceOfRevolution.fromFunction(func, minval, maxval, [axis])

Creates a surface evaluator object for a surface of revolution whose curve is the graph of a single-variable function. The resulting surface will have a circular cross section along its length. Examples of surfaces generated by this technique are cones, frustums, cylinders, spheres, and spheroids (the bases of these surfaces won't be generated).

#### Parameters

• `func` (Type: function)
Function whose graph will be rotated about the axis of rotation, as specified in the "axis" parameter. The function takes a number as a single parameter and returns a number. The return value is effectively the radius of each part of the surface from beginning to end.
• `minval` (Type: number)
Smallest parameter of the function. This is a number of units from the origin along the axis of rotation.
• `maxval` (Type: number)
Largest parameter of the function. This is a number of units from the origin along the axis of rotation. If minval is greater than maxval, both values will be swapped.
• `axis` (Type: Array.<number>) (optional)
Axis of rotation, around which the function graph will be rotated to generate the surface of revolution. If null, undefined, or omitted, the positive Z axis (0, 0, 1) will be the axis of rotation. This parameter is a 3-element array describing the X, Y, and Z coordinates, respectively, of a 3D point. The axis of rotation will run in the direction from the origin to the point given in this parameter. This parameter need not be a unit vector.

#### Return Value

Return value. (Type: SurfaceOfRevolution)

#### Example

The following creates an evaluator for a cone which starts at the origin and runs 10 units along the Z axis.

```var surf=SurfaceOfRevolution.fromFunction(
function(x) {
"use strict"; return x/2; }, // use a constantly increasing function
0, 10);
```

This is an evaluator for the same cone, but shifted 3 units back.

```var surf=SurfaceOfRevolution.fromFunction(
function(x) {
"use strict"; x+=3; return x/2; },
-3,7);
```

The following creates an evaluator for a cylinder which runs from 5 to 10 units, and with a radius of 2 units.

```var surf=SurfaceOfRevolution.fromFunction(
function(x) {
"use strict"; return 2; }, // use a constant radius
5, 10);
```

A surface evaluator object for a torus, a special case of a surface of revolution.

#### Parameters

• `outerRadius` (Type: number)
Radius from the center to the innermost part of the torus.
• `innerRadius` (Type: number)
Radius from the inner edge to the innermost part of the torus.
• `curve` (Type: Object) (optional)
A curve evaluator object that describes a 2-dimensional curve to serve as the cross section of the torus. The curve need not be closed; in fact, certain special surfaces can result by leaving the ends open. If null, undefined, or omitted, uses a circular cross section with a radius of 1.
• `axis` (Type: Array.<number>) (optional)
Axis of rotation, which the torus will pass through. If null, undefined, or omitted, the positive Z axis (0, 0, 1) will be the axis of rotation. This parameter is a 3-element array describing the X, Y, and Z coordinates, respectively, of a 3D point. The axis of rotation will run in the direction from the origin to the point given in this parameter. This parameter need not be a unit vector.

#### Return Value

Return value. (Type: SurfaceOfRevolution)

Back to documentation index.