"Cyclohedron: three-dimensional extension of the cycloid."

Though not particularly useful as a mathematical construct (none I've found so far), those objects which easily generate cyclohedrons generally are. A simple case is a circle with a line segment joined perpendicular to its center (see below for my text art). One possible real-world generator is described by the following: From a set of Legos, take an axle and a wheel. Put the wheel on one end of the axle. This is the general shape which will generate a cyclohedron. To generate, place the wheel-axle combination on a large enough flat surface. Mark a point on the edge of the wheel where it can touch the flat surface. Rotate the wheel so that the point where the axle touches the flat surface is generally stationary. Follow the marked point on the edge of the wheel. The path this point traces is a cyclohedron. This construct is most closely related to the cycloid; it is a further abstraction of the more specific case.

,.ssSss.,
,7'` `'A,
,P` `V,
/7 \A
UU--r--. NI
\A \ /7
`b, \ ,d'
'A., \.A'
`'TT@TT'\..onOK@@@@@@@@@@@HQme....,
,..szszszF\` `'Tuxuxux..,
,zrP'` \ `'Gcc,
,xw'` \ `'wx,
.u'` a `'n.
,dy` \ `qb,
/7` \ `A\
4y \ \D,
,I' \ `U,
dp \ qb
,j' \ `t,
AV \ VA
69--------------h------------------. 96
VA AV
`t, ,j'
qb dp
`I, ,U'
\D 4y`
VA, /7`
`qb, ,dy`
`'n. .u'`
`'xw, ,mx'`
`'Gcc, ,zzN'`
``'Tuxuxux., ,.szszszF'``
````'TTOK@@@@@@@@@@@HQTT'````
. .
. . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . .
.. . . . ..
. . . .
. . . .
. . . .
. . . .
. . . . . .
. . . . ' . . . .
.. . . . . ..
. . . . . .
. . . . . .
. . . . . .
. . . .
. .
. .

(The path the wheel traces on the ground might look roughly like the larger 'ellipse' in the top picture above. The path the wheel traces in midair should look like the second picture.)

Cyclohedrons either fill in a section of the surface of a hemisphere, or describe a curve along it, dependent upon the ratio of the axle length to wheel radius. More generic cases of cyclohedrons are related to a sphere rather than a hemisphere.

Parametric equations:

The setup: **r** is the radius of the wheel, **a** is the axle length, **h=sqrt(r**^{2}+a^{2}) is the hypotenuse of the above two, and **b** is the rotation angle of the system.

`
x=sin(b)(h-(r`^{2}**/h)(1-cos(b))-2rsin(b))**

y=(ar/h)(1-cos(b))

z=cos(b)(h-(r^{2}**/h)(1-cos(b))-0.5rsin(b))**

Take the original setup (wheel and axle) and apply a change to its situation:

- Set the axle end which is opposite the wheel on a pedestal of height c.

- Add another wheel, of any radius, to the end of the axle opposite the original wheel.

The first case is such that the shape that cyclohedron traces will now be on the surface of a sphere rather than a hemisphere (even though all hemispheric surfaces are also spheric surfaces). The second case is rather more interesting. When the radius (r2) of the second wheel is equivalent to the radius (r) of the first, the shape now traced out is a cycloid, and it is easily apparent how the shape under current construction is a generalization of that simpler shape.

Now, combine the two above changes. First, the measurement 'h' as above needs to be requantified. Now there is need for h_{1}, the distance between the edge of wheel 1 and the center of the circle it inscribes, and h_{2} the same for wheel 2, keeping in mind that wheel 2 now follows a path at height c. Actually, (r_{1}/h_{1}) must be equivalent to (r_{2}/h_{2}), so there is no need to actually hold a measurement for h_{2}, as it is equal to (h_{1}*r_{2}/r_{1}). But, since the first means a little less writing (and thus a shorter formula), it may as well be good enough to keep it. The reason that r_{1}/h_{1}=r_{2}/h_{2} is that neither wheel should follow its path around to completion in less time than the other. I've tried it on my computer, and received very strange results when the two wheels were out of sync.

So now all the variables for this "general" setup have been defined. A quick recap:

**r**_{1} and r_{2} are the radii of wheel 1 and wheel 2 respectively.

h_{1} and h_{2} are the radii of the circles inscribed by wheels 1 and 2 respectively.

a is the length of the axle between wheels 1 and 2.

b is the angle that the system has traveled through thus far (rotation angle).

c is the height at which wheel 2 inscribes its circle.

And finally, an extra variable or two: t, u. t is the ratio of the vertical height of r_{1} to its leaning height. u is the third leg of that triangle.

`
`**
-c+sqrt(c**^{2}**(r**_{1}-r_{2})^{2}**-((r**_{1}-r_{2})^{2}**+a**^{2}**)(c**^{2}**-a**^{2}**))**

t= --------------------------------------

(r_{1}-r_{2})^{2}**+a**^{2}

**
u=sqrt(r**_{1}^{2}**-t**^{2}***r**_{1}^{2}**)**

x=sin(b)*(h_{1}-t*r_{1}-u)

y=t*r_{1}*(1-cos(b))

z=cos(b)*(h_{1}-t*r_{1}-u)

A couple points to be made:

If r_{1}=r_{2}, a=c. When c=0, of course, this is the cycloid. Otherwise, the shape is a cycloid bent to follow a circle, all flat.

c can be negative.

It's obvious that a lot rides on t in this set, but using t does make it all much simpler.

Here is my Turbo Pascal 7.0 code for the fully generic cyclohedron:

Program ThreeDcc;
uses graph,crt;
procedure go;
var
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
x,y,m,r2,z,a,r,s,c:integer;
b,rar2,t,r3,r2m,ar2:real; (*rar2: the fourth leg of the
quadrilateral r,a,r2; r3: the "ground" radius; r2m: the third leg of the
triangle r2, m; ar2: the third leg of the triangle a, r2*)
begin
a:=random(20)+1;
r:=random(20)+1;
m:=random(20);
repeat
r2:=random(20);
until not (r=r2);
a:=2*a;
r:=2*r;
m:=2*m;
r2:=2*r2;
grDriver := Detect;
InitGraph(grDriver, grMode,'c:\tp\bgi\egavga.bgi ');
ErrCode := GraphResult;
if ErrCode = grOk then
begin
b:=0.01;
t:=0;
c:=0;
ar2:=arctan(a/(r-r2));
rar2:=sqrt((r*r)+(a*a)+(r2*r2)-2*r*(a+r2)*r2/(sqrt((r2*r2)+(a*a))));
r3:=(((rar2*sin(3.14159-(m/rar2)))-(arctan(r2/m)))/(m/(sqrt((r2*r2)+(a*a)))));
r2m:=arctan(m/(r3-r2));
repeat
c:=c+1;
t:=t+b;
x:=320+trunc((r3*cos(t*r/r3))-(r*(1-cos(t))*cos(r2m+ar2)*cos(t*r/r3))+
(r*sin(t)*sin(t*r/r3)));
y:=100-trunc(r*(1-cos(t))*sin(r2m+ar2));
z:=240+trunc((r3*sin(t*r/r3))-(r*(1-cos(t))*cos(r2m+ar2)*sin(t*r/r3))+
(r*sin(t)*cos(t*r/r3)));
putpixel(x,y,2);
putpixel(x,z,2);
if (c>15779) then
begin
c:=0;
setfillstyle(0,0);
bar(0,0,640,480);
a:=random(20)+1;
r:=random(20)+1;
m:=random(20);
repeat
r2:=random(20)+1;
until not (r=r2);
a:=2*a;
r:=2*r;
m:=2*m;
r2:=2*r2;
ar2:=arctan(a/(r-r2));
rar2:=sqrt((r*r)+(a*a)+(r2*r2)-2*r*(a+r2)*r2/(sqrt((r2*r2)+(a*a))));
r3:=(((rar2*sin(3.14159-(m/rar2)))-
(arctan(r2/m)))/(m/(sqrt((r2*r2)+(a*a)))));
r2m:=arctan(m/(r3-r2));
if (r>a) then s:=100 div r else s:=100 div a;
t:=0;
end;
until keypressed;
end;
closegraph;
end;
begin
randomize;
go;
end.