# Klein Cycloid

Banchoff's Kleinbottle
Reference: C. Pickover's "Mazes for the Mind" Page 100
Converted into a cycloid by Roger Bagula © (July 1997)

Graphics by Paul Bourke
September 1998

Parametric definition

 x = cos(u/c) * cos(u/b) * (a + cos(v)) + sin(u/b) * sin(v) * cos(v) y = sin(u/c) * cos(u/b) * (a + cos(v)) + sin(u/b) * sin(v) * cos(v) z = -sin(u/b) * (a + cos(v)) + cos(u/b) * sin(v) * cos(v) Where 0 <= u <= 2 b c and 0 <= v <= 4

Appeared on the October 5, 2001 (Vol 10 No 40) issue of HPC magazine.

### C source, generating an OOGL file

```#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "paulslib.h"

int main(int argc,char **argv)
{
int i,j,nu=200,nv=50;
double u,v;
double a=10.0,b=3,c=2;
XYZ p;
COLOUR colour;
COLOUR black = {0.0,0.0,0.0};

if (argc < 4) {
fprintf(stderr,"Usage: %s a b c\n",argv[0]);
exit(0);
}
a = atof(argv[1]);
b = atof(argv[2]);
c = atof(argv[3]);

printf("CMESH\n%d %d\n",nv+1,nu+1);
for (i=0;i<=nu;i++) {
for (j=0;j<=nv;j++) {

u = i * 2 * b * c * PI / nu;
v = j * 4 * PI / nv;

p.x = cos(u/c) * cos(u/b) * (a + cos(v)) + sin(u/b) * sin(v) * cos(v);
p.y = sin(u/c) * cos(u/b) * (a + cos(v)) + sin(u/b) * sin(v) * cos(v);
p.z = -sin(u/b) * (a + cos(v))           + cos(u/b) * sin(v) * cos(v);

colour = GetColour(u,0.0,2*b*c*PI,4);
printf("%g %g %g %g %g %g 0.5\n",p.x,p.y,p.z,
colour.r,colour.g,colour.b);
}
}
}
```

### Mathematica code

(by R. L. Bagula, 2 July 1997)
```a=10;
b=3;
c=2;
X=Cos[u/c]*Cos[u/b]*(a+Cos[v])+Sin[u/b]*Sin[v]*Cos[v];
Y=Sin[u/c]*Cos[u/b]*(a+Cos[v])+Sin[u/b]*Sin[v]*Cos[v];
Z=-Sin[u/b]*(a+Cos[v])+Cos[u/b]*Sin[v]*Cos[v];

ParametricPlot3D[{X, Y, Z}, {u, 0, 2*b*c*Pi}, {v, 0, 4 Pi},
PlotPoints -> {120,10}, Axes -> False, Boxed -> False,
ViewPoint->{5.265, -6.828, 2.580}];
```