logo back up home forward   further reading more topics »

Maths - Parameterisation

We can often specify a surface in terms of a set of coordinates (often orthogonal coordinates but cylindrical and spherical coordinates can also be useful). So, for example, a surface of a sphere can be specified by:

r²=x²+y²+z²

We could use this to plot the surface, we might choose to step through two of the dimensions and calculate the third parameter to give a point on the surface of the sphere using:

z = √(r²-x²-y²)

there are possible problems with this:

In order to minimise these problems it often helps to express the surface in terms of a set of parameters other than the base coordinates:

 

Shape Parameters Limits

Sphere

r²=x²+y²+z²

sphere

in spherical coordinates:

c1 = R
c2 = π*u
c3 = 2*π*v

convert to rectangular coordinates

x = c1 * math.sin(c2) * math.cos(c3)
y = c1 * math.sin(c2) * math.sin(c3)
z = c1 * math.cos(c2)

where:

R=1=Sphere Radius

0< u <1
0< v <1
Cylinder    

Torus

torus

in cylindrical coordinates:

c1 =r0 + r1*cos(2*π*u)
c2 =2*π*v
z =r1*sin(2*π*u)

convert to rectangular coordinates

x = c1 * math.cos(c2)
y = c1 * math.sin(c2)

where:

r0=1=Ring Radius
r1=0.5=Section Radius

0< u <1
0< v <1

Mobius strip

mobius strip

x(u,v) = (1 + (v/2)*cos(u/2))*cos(u)
y(u,v) = (1 + (v/2)*cos(u/2))*sin(u)
z(u,v) = (v/2)*sin(u/2)
0<u<= 2*π
-1 < v < 1
Klein bottle (represented in 3 dimensions)

x(u,v) = sin(v)*(4 + 2*cos(u)*cos(t*v)- sin(2*u)*sin(t*v)
y(u,v) = cos(v)*(4 + 2*cos(u)*cos(t*v)- sin(2*u)*sin(t*v)
z(u,v) = 2*cos(u)*sin(t*v)+sin(2*u)*cos(t*v)

t = twist = 0.5

Note1: this is a 'figure-8' Klien bottle. The usual form is built from 4 parts.
Yet another version (Lawson-Klein) can be built from a helicoidal surface.

Note2: This can only be physically realised in four dimensions, since it must pass through itself without making a hole.

 

Circular helix

 

x=a*sin(t),
y=a*cos(t),
z=at/(2*π*c)
 

Lissajous curve

 

x= r*sin(theta*t)*cos(phi*t),
y= r*sin(theta*t)*sin(phi*t),
z = cos(phi*t)
 

A coil winding around a torus

coil

in cylindrical coordinates:

c1=R0 + R1*E0*cos(2*π*n1*v+phi1)+R2*E1*cos(2*π*n2*u+2*π*n1*v+phi1)
c2=2*π*v
z=R1*E0*sin(2*π*n1*v+phi1)+R2*E1*sin(2*pi*n2*u+2*pi*n1*v+phi1)

convert to rectangular coordinates

x = c1 * math.cos(c2)
y = c1 * math.sin(c2)

where:

R1=0.3 = Radius of the section of the torus
R2=0.075 = Radius of the coil
n1=3.3 = Number of full circles of the coil around the torus
phi1 = 0 = Starting angle of the coil
n2= 1= Number of points for the coil section
alpha0=1=Exponential factor for the torus section R1
alpha1=1=Exponential factor for the coil radius R2

0< u <1

-2< v <1

coil sphere 1

 

in spherical coordinates:

c1=r0+r1t*cos(2*π*u)
c2=(r1t/r0)*sin(2*π*u)+π*v/(2*n)+π/2
c3=2*π*v

convert to rectangular coordinates

x = c1 * math.sin(c2) * math.cos(c3)
y = c1 * math.sin(c2) * math.sin(c3)
z = c1 * math.cos(c2)

where:

r0=1.0=Sphere Radius
r1=0.1= Coil Max Radius
n=3=Coils
r1t=r1*((abs(v)-n)/n)²

0< u <1
-n< v <n

coil sphere 2

 

in spherical coordinates:

c1=r0+r1*tap*cos(2*π*nth*v+thphi)+r2*tap*cos(2*π*u)
c2=r1*tap*sin(2*π*nth*v+thphi)+r2*tap*sin(2*π*u)+π*v/(2*n)+π/2
c3=2*π*v

convert to rectangular coordinates

x = c1 * math.sin(c2) * math.cos(c3)
y = c1 * math.sin(c2) * math.sin(c3)
z = c1 * math.cos(c2)

where:

r0=1.0=Sphere Radius
r1=0.075=Coil Max Radius
r2=0.05=Thread Max Radius
n=3=Coils
nth=6.0=Threads
thphi=0.0=Thread angular offset
tap=((abs(v)-n)/n)²

0< u <1
-n< v <n

A Paraboloid (Revolution type)

z = a(x²+y²)

paraboloid

in cylindrical coordinates:

c1 = u
c2 = 2*π*v
z = a*u²

convert to rectangular coordinates

x = c1 * math.cos(c2)
y = c1 * math.sin(c2)

where:

a=1

0< u <1

0< v <1

A Paraboloid

z = a(x²+y²)

 

x = u
y = v
z = a*(u²-v²)

where:

a=1

-1< u <1

-1< v <1

Shell

shell

in cylindrical coordinates:

c1 = (r0 + Sp*cos(2*π*u))*E0
c2 = 2*π*v
z = d*E0+Sp*sin(2*π*u)*E0

convert to rectangular coordinates

x = c1 * math.cos(c2)
y = c1 * math.sin(c2)

where:

r0=0.22=Radius of the main winding up coil
r1=0.20=Radius of the circle defining the section
r2=0.5=Spike length
alpha=0.30=Exponential ratio of the spiral
d=-1.10=Vertical displacement of each spiral turn
N0=6=Number of spikes across
M0=8=Sharpness of the spikes across
N1=10.5347=Number of the spikes along (each turn)
M1=12=Sharpness of the spikes across
beta=1.5=Winding of the spikes
a=10=Faloff of spikes
Sp=(r1+r2*Gauss*SpAlong*SpAcross)=Spikes
E0=exp(alpha*v)=Exponential factor
Gauss=exp(-a*(cos(2*π*u)-1.0)²)=Gaussian Spike tapering
SpAlong=((sin(N1*2*π*v)+1)/2.0)M1=Spikes Along formula
SpAcross=((sin(N0*2*π*u+beta*2*π*v)+1)/2.0)M0=Spikes across Formula

0< u <1

-9< v <1

Logarithmic Spiral

spiral

in cylindrical coordinates:

c1 =r0*E+r1*E*cos(2*π*u)
c2 =2*π*v
z =d*E+r1*E*sin(2*π*u)

convert to rectangular coordinates

x = c1 * math.cos(c2)
y = c1 * math.sin(c2)

where:

r0=1.0=Spiral initial radius
r1=0.25=Bevel initial radius
alpha0=0.15=Exponential factor
d=0.75=Step along z
E=exp(alpha0*2*π*v)=Exponential behavior

0< u <1
0< v <1

The images here were generated by the program from this page.


metadata block
see also:

normals

Correspondence about this page

Book Shop - Further reading.

Where I can, I have put links to Amazon for books that are relevant to the subject, click on the appropriate country flag to get more details of the book or to buy it from them.

cover 3D Math Primer - Aimed at complete beginners to vector and matrix algebra.

Other Math Books

Commercial Software Shop

Where I can, I have put links to Amazon for commercial software, not directly related to the software project, but related to the subject being discussed, click on the appropriate country flag to get more details of the software or to buy it from them.

 

Can you help?

Please send me any improvements to here. I would appreciate ideas to make the pages more useful including error correction, ideas for new pages, improvements to wording. It helps if you quote the full URL of the page.

 

progam

I am working on a project which uses these principles, if you would like to help me with this you are welcome to join in, here:

http://sourceforge.net/projects/mjbworld/

This site may have errors. Don't use for critical systems.

Copyright (c) 1998-2010 Martin John Baker - All rights reserved - privacy policy.