Klein CycloidBanchoff's KleinbottleReference: C. Pickover's "Mazes for the Mind" Page 100 Converted into a cycloid by Roger Bagula © (July 1997)
Graphics by Paul Bourke Parametric definition
![]()
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}];
|