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}]; |