{VERSION 2 3 "HP RISC UNIX" "2.3" }
{USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0
1 0 0 0 0 }{CSTYLE "Hyperlink" -1 17 "" 0 1 0 128 128 1 0 0 1 0 0 0 0
0 0 }{CSTYLE "" -1 256 "" 1 24 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE ""
-1 257 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 258 "" 0 1 0 0
0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 259 "" 0 1 0 0 0 0 0 1 0 0 0 0 0
0 0 }{CSTYLE "" -1 260 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE ""
-1 261 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 262 "" 0 1 0 0
0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 263 "" 0 1 0 0 0 0 0 1 0 0 0 0 0
0 0 }{CSTYLE "" -1 264 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE ""
-1 265 "" 1 18 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 266 "" 0 1 0
0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 267 "" 0 1 0 0 0 0 0 1 0 0 0 0
0 0 0 }{CSTYLE "" -1 268 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE ""
-1 269 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 270 "" 0 1 0 0
0 0 1 0 0 0 0 0 0 0 0 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE
"" 0 256 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0
-1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 257 1 {CSTYLE "" -1 -1 "" 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }}
{SECT 0 {PARA 256 "" 0 "" {TEXT 256 20 "The 24-cell Polytope" }}{PARA
0 "" 0 "" {TEXT -1 396 " These are the procedures necessary to ge
nerate the various images of the 24-cell. In order to keep the text u
ninterupted, placing the cursor on the first line of commands (in red)
will execute all procedures necessary to define the polytope. Maple \+
will then take you to the first line of the next execution group. You
may need to scroll back to read the text which precedes each display.
" }}{PARA 0 "" 0 "" {TEXT -1 103 "For a detailed explanation of the pr
ocedures below, scroll through them and read the text and refer to " }
{HYPERLNK 17 "Appendix A." 1 "proc.mws" "" }}{PARA 0 "" 0 "" {TEXT -1
0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 81 " These are the librari
es of commands needed to execute the procedures below." }}{PARA 0 "> \+
" 0 "" {MPLTEXT 1 0 25 "with(linalg):with(plots):" }}{PARA 0 "" 0 ""
{TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 6 " " }{TEXT 261 7 "Proj
ect" }{TEXT -1 54 " is a procedure which takes a polytope P and a vect
or " }{TEXT 258 1 "v" }{TEXT -1 66 " and projects the vertices of P on
to the hyperplane orthogonal to " }{TEXT 257 1 "v" }{TEXT -1 1 "." }}
{PARA 0 "> " 0 "" {MPLTEXT 1 0 309 "project:=proc(P,v) local a,b,c,d,n
,i;\na:=v[1];b:=v[2];c:=v[3];d:=v[4];\nn:=sqrt(a^2+b^2+c^2+d^2);\n[[se
q([(P[1][i][1]*d+P[1][i][2]*c-P[1][i][3]*b- P[1][i][4]*a)/n,\n(-P[1][i
][1]*c+P[1][i][2]*d+P[1][i][3]*a- P[1][i][4]*b)/n,\n(P[1][i][1]*b-P[1]
[i][2]*a+P[1][i][3]*d- P[1][i][4]*c)/n],\ni=1..nops(P[1]))],P[2]];\nen
d:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 6 " \+
" }{TEXT 262 9 "Perspproj" }{TEXT -1 51 " is a procedure which takes
a polytope P, a vector " }{TEXT 259 1 "v" }{TEXT -1 416 ", and a fact
or f, and projects the vertices of P onto the hyperplane orthogonal to
v, with a perspective distance factor of f. For large values of f, t
he object will be perspected as if it was viewed from far away. Thus,
the effects of perspective will be minimal. Smaller values of f will
generate a perspective effect in the projection. Values must be grea
ter than 1, and this often results in a division by 0." }}{PARA 0 "> \+
" 0 "" {MPLTEXT 1 0 507 "perspproj:=proc(P,v,f) local a,b,c,d,n,i,p1,p
2,p3,p4,g,q1,q2,q3,q4;\na:=v[1];b:=v[2];c:=v[3];d:=v[4];\nn:=sqrt(a^2+
b^2+c^2+d^2);\nfor i from 1 to nops(P[1]) do;\np1:=P[1][i][1];p2:=P[1]
[i][2];\np3:=P[1][i][3];p4:=P[1][i][4];\np1:=p1-f*a/n;p2:=p2-f*b/n;\np
3:=p3-f*c/n;p4:=p4-f*d/n;\ng:=-n*f/(a*p1+b*p2+c*p3+d*p4);\nq1[i]:=g*p1
;q2[i]:=g*p2;q3[i]:=g*p3;q4[i]:=g*p4;\nod;\n[[seq([(q1[i]*d+q2[i]*c-q3
[i]*b-q4[i]*a)/n,\n(-q1[i]*c+q2[i]*d+q3[i]*a-q4[i]*b)/n,\n(q1[i]*b-q2[
i]*a+q3[i]*d-q4[i]*c)/n],\ni=1..nops(P[1]))],P[2]];\nend:" }}{PARA 0 "
" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 6 " " }{TEXT 263
10 "Polydecode" }{TEXT -1 185 " is a procedure which takes a polytope \+
P and lists the coordinates of the vertices of each polygonal face. T
his defines the polytope by its faces, allowing polygonplot3D to displ
ay it." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 103 "polydecode:=proc(P) loca
l i,j;\n[seq([seq(P[1][P[2][i][j]],j=1..nops(P[2][i]))],\ni=1..nops(P[
2]))];\nend:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT
-1 6 " " }{TEXT 264 8 "Multpoly" }{TEXT -1 178 " is a procedure w
hich take a polytope P and a rotation matrix M and multiplies each of \+
the vertices (thought of as column matrices) by M, generating a rotati
on about some vector " }{TEXT 260 1 "v" }{TEXT -1 1 "." }}{PARA 0 "> \+
" 0 "" {MPLTEXT 1 0 358 "multpoly:=proc(P,M) local i;\n[[seq([M[1,1]*P
[1][i][1]+M[1,2]*P[1][i][2]+M[1,3]*P[1][i][3]+M[1,4]*P[1][i][4],\nM[2,
1]*P[1][i][1]+M[2,2]*P[1][i][2]+M[2,3]*P[1][i][3]+M[2,4]*P[1][i][4],\n
M[3,1]*P[1][i][1]+M[3,2]*P[1][i][2]+M[3,3]*P[1][i][3]+M[3,4]*P[1][i][4
],\nM[4,1]*P[1][i][1]+M[4,2]*P[1][i][2]+M[4,3]*P[1][i][3]+M[4,4]*P[1][
i][4]],\ni=1..nops(P[1]))],P[2]];\nend:" }}{PARA 0 "" 0 "" {TEXT -1 0
"" }}{PARA 0 "" 0 "" {TEXT -1 31 "The 24 vertices of the 24-cell:" }}
{PARA 0 "> " 0 "" {MPLTEXT 1 0 446 "p[1]:=[1,1,0,0]: p[2]:=[1,0,1,0]: \+
p[3]:=[1,0,0,1]: p[4]:=[0,1,1,0]: p[5]:=[0,1,0,1]: p[6]:=[0,0,1,1]:\np
[7]:=[-1,1,0,0]: p[8]:=[-1,0,1,0]:\np[9]:=[-1,0,0,1]: p[10]:=[0,-1,1,0
]:\np[11]:=[0,-1,0,1]: p[12]:=[0,0,-1,1]:\np[13]:=[1,-1,0,0]: p[14]:=[
1,0,-1,0]:\np[15]:=[1,0,0,-1]: p[16]:=[0,1,-1,0]:\np[17]:=[0,1,0,-1]: \+
p[18]:=[0,0,1,-1]:\np[19]:=[-1,-1,0,0]: p[20]:=[-1,0,-1,0]:\np[21]:=[-
1,0,0,-1]: p[22]:=[0,-1,-1,0]:\np[23]:=[0,-1,0,-1]: p[24]:=[0,0,-1,-1]
:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 119 "The
faces of the 24-cell are each equilateral triangles. The 96 polygons
of the 24-cell, given by their vertices, are:" }}{PARA 0 "> " 0 ""
{MPLTEXT 1 0 1653 "f[1]:=[1,2,4]:f[2]:=[3,5,6]:f[3]:=[1,2,3]:\nf[4]:=[
2,3,6]:f[5]:=[2,4,6]:f[6]:=[4,5,6]:\nf[7]:=[1,4,5]:f[8]:=[1,5,3]:f[9]:
=[1,3,14]:\nf[10]:=[1,5,16]:f[11]:=[4,5,7]:f[12]:=[4,6,8]:\nf[13]:=[2,
6,10]:f[14]:=[2,3,13]:f[15]:=[3,5,12]:\nf[16]:=[1,4,17]:f[17]:=[5,6,9]
:f[18]:=[2,4,18]:\nf[19]:=[3,6,11]:f[20]:=[1,2,15]:f[21]:=[1,14,16]:\n
f[22]:=[1,15,17]:f[23]:=[2,15,18]:\nf[24]:=[2,10,13]:f[25]:=[3,11,12]:
\nf[26]:=[3,13,14]:f[27]:=[4,17,18]:\nf[28]:=[4,7,8]:f[29]:=[5,9,12]:
\nf[30]:=[5,7,16]:f[31]:=[6,9,11]:f[32]:=[6,8,10]:\nf[33]:=[15,17,18]:
f[34]:=[9,11,12]:\nf[35]:=[8,10,18]:f[36]:=[10,11,13]:\nf[37]:=[13,14,
15]:f[38]:=[12,14,16]:\nf[39]:=[7,16,17]:f[40]:=[7,8,9]:f[41]:=[1,14,1
5]:\nf[42]:=[1,16,17]:f[43]:=[5,12,16]:f[44]:=[5,7,9]:\nf[45]:=[4,7,17
]:f[46]:=[4,8,18]:f[47]:=[6,8,9]:\nf[48]:=[6,10,11]:f[49]:=[2,10,18]:
\nf[50]:=[2,13,15]:f[51]:=[3,13,11]:\nf[52]:=[3,12,14]:f[53]:=[19,9,11
]:\nf[54]:=[19,8,10]:f[55]:=[19,8,9]:\nf[56]:=[19,10,11]:f[57]:=[20,7,
16]:\nf[58]:=[20,9,12]:f[59]:=[20,7,9]:\nf[60]:=[20,12,16]:f[61]:=[21,
7,8]:\nf[62]:=[21,17,18]:f[63]:=[21,7,17]:\nf[64]:=[21,8,18]:f[65]:=[2
2,11,12]:\nf[66]:=[22,13,14]:f[67]:=[22,11,13]:\nf[68]:=[22,12,14]:f[6
9]:=[23,10,13]:\nf[70]:=[23,15,18]:f[71]:=[23,10,18]:\nf[72]:=[23,13,1
5]:f[73]:=[24,15,17]:\nf[74]:=[24,14,16]:f[75]:=[24,14,15]:\nf[76]:=[2
4,16,17]:f[77]:=[16,20,24]:\nf[78]:=[14,22,24]:f[79]:=[13,22,23]:\nf[8
0]:=[10,19,23]:f[81]:=[8,19,21]:\nf[82]:=[7,21,20]:f[83]:=[9,19,20]:\n
f[84]:=[17,21,24]:f[85]:=[12,20,22]:\nf[86]:=[15,23,24]:f[87]:=[11,19,
22]:\nf[88]:=[18,21,23]:f[89]:=[19,20,22]:\nf[90]:=[21,23,24]:f[91]:=[
19,20,20]:\nf[92]:=[20,21,24]:f[93]:=[20,22,24]:\nf[94]:=[22,23,24]:f[
95]:=[19,22,23]:\nf[96]:=[19,21,23]:" }}{PARA 0 "" 0 "" {TEXT -1 0 ""
}}{PARA 0 "" 0 "" {TEXT -1 320 "The data structure used for the larger
4-polytopes is a list of a list of vertices, whose coordinates are de
fined above, and a list of polygons given by the number of their verti
ces. The cells are not listed, as this information is not needed in a
ny of the calculations. The list structure is: [[vertices],[polygons]
]." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 56 "twofourcell:=[[seq(p[i],i=1..
24)],\n[seq(f[i],i=1..96)]]:" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}
{PARA 257 "" 0 "" {TEXT 265 11 "The 24-cell" }}{PARA 0 "" 0 "" {TEXT
-1 0 "" }}{PARA 0 "" 0 "" {TEXT 266 9 "Existence" }}{PARA 0 "" 0 ""
{TEXT -1 491 " Unlike the simplex, the measure, and the cross
polytopes, there is no simple repeatable function from dimension to d
imension which creates the 24-cell polytope. In fact, the simplex, me
asure, and cross polytopes are the only polytopes which exist in every
n-space. Recall that there are infinitely many regular polygons, onl
y five regular polyhedra, and six regular polytopes. Coxeter offers a
proof that for dimensions of n>4, the simplex, measure, and cross pol
ytopes are the " }{TEXT 270 4 "only" }{TEXT -1 26 " regulars which can
exist." }}{PARA 0 "" 0 "" {TEXT -1 230 " However, it is clea
r to see that the 24-cell is a regular polytope, or at least clear tha
t it's very likely that the 24-cell is regular. Its vertices are gene
rated by the midpoints of the edges of the hyperoctahedron. " }}
{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT 267 9 "Structure
" }}{PARA 0 "" 0 "" {TEXT -1 662 " Each midpoint is connected
to the midpoints of all the edges joining the first edge. As such, t
he faces of the 24-cell are equilateral triangles. Its cells are 24 o
ctahedra. Another way of looking at the construction is to take the c
enters of the cubic cells of the hypercube as vertices (since the hype
rcube and hyperoctahedron are duals). Thus, each vertex is connected \+
to 6 others. Connecting the 24 vertices to those adjacent to it creat
es 96 edges. The octahedral cells meet three around an edge, each fac
e contained in two cells. Since there are eight faces on an octahedro
n, and 24 octahedral cells, the number of faces is 8(24)/2 = 96. " }}
{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT 268 15 "Schl\344
fli Symbol" }}{PARA 0 "" 0 "" {TEXT -1 513 " The Schl\344fli \+
symbol for the 24-cell begins with its cell symbol \{3,4\}. These oct
ahedra meet three around an edge, so its symbol is \{3,4,3\}. From t
he notation, we see that its vertex figure is a cube. The faces of th
e cube come from the vertex figures of the octahedra. since three oct
ahedra surround an edge, three squares surround a point in the vertex \+
polyhedron. Also, we see that the 24-cell is its own dual. It has th
e same number of vertices as cells, and the same number of edges as fa
ces." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT 269 11 "
Coordinates" }}{PARA 0 "" 0 "" {TEXT -1 624 " The coordinates
of the vertices of the 24-cell can be determined by the coordinates o
f the cross polytope, which are themsleves quite simple. Since the co
ordinates of the cross look like (1,0,0,0) and are joined to all other
vertices except their opposites (-1,0,0,0), the midpoints of the edge
s can be found by averaging any two points. (If opposites were averag
ed, the midpoint would be (0,0,0,0).) Thus, the coordinates look like
(1/2,1/2,0,0) (1/2,-1/2,0,0) and so on. We can multiply each of thes
e coordinates by 2 and not change the shape of the object, and doing s
o gives us permutations of (\2611,\2611,0,0)." }}{PARA 0 "" 0 ""
{TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "
" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 155 "Here is an image of th
e 24-cell. If you concentrate on separating a group of 6 adjacent ver
tices, you may be able to see a (slightly squished) octahedron." }}
{PARA 0 "> " 0 "" {MPLTEXT 1 0 107 "polygonplot3d(polydecode(project(t
wofourcell,[1,2,3,4])),scaling=constrained,style=wireframe,thickness=2
);\n" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "" 0 "" {TEXT
-1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 93 "As before, we can vary the proj
ection vector to get a sequence of views. Here is an example." }}
{PARA 0 "> " 0 "" {MPLTEXT 1 0 206 "display([seq(polygonplot3d(polydec
ode(project(twofourcell,[1,evalf(cos(Pi*k/20),2),evalf(cos(Pi*k/20),2)
,evalf(cos(Pi*k/20),2)]))),k=0..40)],insequence=true,thickness=2,scali
ng=constrained,style=wireframe);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1
0 "" }}{PARA 0 "" 0 "" {TEXT -1 283 "Here is a perspective projection \+
of the 24-cell looking down the w-axis. It appears as a large octahed
ron with a smaller octahedron inside. The triangular sides of the out
er octahedron are divided into four congruent triangles, each of which
is the face of another octahedral cell." }}{PARA 0 "> " 0 ""
{MPLTEXT 1 0 110 "polygonplot3d(polydecode(perspproj(twofourcell,[1,0,
0,0],2)),scaling=constrained,style=wireframe,thickness=1);" }}}{EXCHG
{PARA 0 "" 0 "" {TEXT -1 282 " Now we can take a look at a se
ries of images produced by rotating the 24-cell about a plane. Watchi
ng it rotate, you may notice the same rotation as the hypercube previo
usly. Several hypecubes can be inscribed in the 24-cell, which is cle
ar from looking at its vertices." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 92
"i:='i':t:=i*Pi/30:\nM:=array([[cos(t),-sin(t),0,0],[sin(t),cos(t),0,0
],[0,0,1,0],[0,0,0,1]]);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 162 "displa
y([seq(polygonplot3d(polydecode(perspproj(multpoly(twofourcell,M),[1,0
,0,0],3)),scaling=constrained,style=wireframe,thickness=1),i=1..15)],i
nsequence=true);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}
{MARK "0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 }