{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 "" 1 18 0 0 0 0 0 0 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 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 266 "" 1 18 0
0 0 0 0 0 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 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 271 "" 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 "Maple Output" 0
11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 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 }{PSTYLE "" 0 258 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 22 "The 4-D Cross Polytope" }}
{PARA 257 "" 0 "" {TEXT 257 19 "The Hyperoctahedron" }}{PARA 0 "" 0 "
" {TEXT -1 403 " These are the procedures necessary to generate t
he various images of the cross polytope. In order to keep the text un
interupted, placing the cursor on the first line of commands (in red) \+
will execute all procedures necessary to define the polytope. Maple w
ill 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 262 7 "Proj
ect" }{TEXT -1 54 " is a procedure which takes a polytope P and a vect
or " }{TEXT 259 1 "v" }{TEXT -1 66 " and projects the vertices of P on
to the hyperplane orthogonal to " }{TEXT 258 1 "v" }{TEXT -1 1 "." }}
{PARA 0 "> " 0 "" {MPLTEXT 1 0 314 "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],P[3]]
;\nend:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 6
" " }{TEXT 263 9 "Perspproj" }{TEXT -1 51 " is a procedure which \+
takes a polytope P, a vector " }{TEXT 260 1 "v" }{TEXT -1 416 ", and a
factor f, and projects the vertices of P onto the hyperplane orthogon
al to v, with a perspective distance factor of f. For large values of
f, the 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
greater than 1, and this often results in a division by 0." }}{PARA
0 "> " 0 "" {MPLTEXT 1 0 512 "perspproj:=proc(P,v,f) local a,b,c,d,n,i
,p1,p2,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;\np3:=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],P[3]];\nend:" }
}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 6 " " }
{TEXT 264 10 "Polydecode" }{TEXT -1 185 " is a procedure which takes a
polytope P and lists the coordinates of the vertices of each polygona
l face. This defines the polytope by its faces, allowing polygonplot3
D to display it." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 103 "polydecode:=pr
oc(P) local 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 265 8 "Multpoly" }{TEXT -1 178 " is a \+
procedure which take a polytope P and a rotation matrix M and multipli
es each of the vertices (thought of as column matrices) by M, generati
ng a rotation about some vector " }{TEXT 261 1 "v" }{TEXT -1 1 "." }}
{PARA 0 "> " 0 "" {MPLTEXT 1 0 363 "multpoly:=proc(P,M) local i;\n[[se
q([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],\nM[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],P[3]];\nend:" }}{PARA 0 ""
0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 37 "The 8 vertices of th
e cross polytope:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 139 "p[1]:=[1,0,0,
0]:\np[2]:=[-1,0,0,0]:\np[3]:=[0,1,0,0]:\np[4]:=[0,-1,0,0]:\np[5]:=[0,
0,1,0]:\np[6]:=[0,0,-1,0]:\np[7]:=[0,0,0,1]:\np[8]:=[0,0,0,-1]:" }}
{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 63 "The 32 po
lygons of the cross polytope, given by their vertices:" }}{PARA 0 "> \+
" 0 "" {MPLTEXT 1 0 482 "f[1]:=[1,3,5]:f[2]:=[1,3,6]:f[3]:=[1,3,7]:\nf
[4]:=[1,3,8]:f[5]:=[1,4,5]:f[6]:=[1,4,6]:\nf[7]:=[1,4,7]:f[8]:=[1,4,8]
:f[9]:=[1,5,7]:\nf[10]:=[1,5,8]:f[11]:=[1,6,7]:f[12]:=[1,6,8]:\nf[13]:
=[2,3,5]:f[14]:=[2,3,6]:f[15]:=[2,3,7]:\nf[16]:=[2,3,8]:f[17]:=[2,4,5]
:f[18]:=[2,4,6]:\nf[19]:=[2,4,7]:f[20]:=[2,4,8]:f[21]:=[2,5,7]:\nf[22]
:=[2,5,8]:f[23]:=[2,6,7]:f[24]:=[2,6,8]:\nf[25]:=[3,5,7]:f[26]:=[3,5,8
]:f[27]:=[3,6,7]:\nf[28]:=[3,6,8]:f[29]:=[4,5,7]:f[30]:=[4,5,8]:\nf[31
]:=[4,6,7]:f[32]:=[4,6,8]:\n" }}{PARA 0 "" 0 "" {TEXT -1 59 "The16 cel
ls of the cross polytope, given by their polygons:" }}{PARA 0 "> " 0 "
" {MPLTEXT 1 0 324 "c[1]:=[1,3,9,25]:\nc[2]:=[1,4,10,26]:\nc[3]:=[2,3,
11,27]:\nc[4]:=[2,4,12,28]:\nc[5]:=[5,7,9,29]:\nc[6]:=[5,8,10,30]:\nc[
7]:=[6,7,11,31]:\nc[8]:=[6,8,12,32]:\nc[9]:=[13,15,21,25]:\nc[10]:=[12
,16,22,26]:\nc[11]:=[14,15,23,27]:\nc[12]:=[14,16,24,28]:\nc[13]:=[17,
19,21,29]:\nc[14]:=[17,20,22,30]:\nc[15]:=[18,19,23,31]:\nc[16]:=[18,2
0,24,32]:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1
286 "The data structure used for the 4-polytope is a list of a list of
vertices, whose coordinates are defined above, a list of polygons giv
en by the number of their vertices, and a list of cells given by the n
umber of their polygons. The list structure is: [[vertices],[polygons
],[cells]]." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 70 "cross:=[[seq(p[i],i=
1..8)],\n[seq(f[i],i=1..32)],\n[seq(c[i],i=1..16)]]:" }}{PARA 0 "" 0 "
" {TEXT -1 0 "" }}}{PARA 258 "" 0 "" {TEXT 266 19 "The Hyperoctahedron
" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT 267 9 "Exist
ence" }}{PARA 0 "" 0 "" {TEXT -1 631 " The hyperoctahedron, o
r cross polytope, is the third polytope which can be constructed in a \+
straightforward manner by repeating a simple procees. This is how it \+
works. When we constructed the first measure polytope, we did so by p
lacing points at (1) and (-1). If we consider these points to be oppo
sites, we can generate opposite pairs on each axis of the vector-space
we are discussing. In two dimensions, we place two points on the pos
itive and negative x-axes, and two more on the positive and negative y
-axes. The rule for connecting the vertices is likewise simple: conn
ect every vertex to every other vertex " }{TEXT 271 6 "except" }{TEXT
-1 359 " its opposite. With this rule, we must recognize that the cro
ss polytope in 1-space is actually two distinct points, not a line-seg
ment. In 2-space, the cross is the same as the measure--a square. Th
e difference is in the way we constructed it, not in its actual form. \+
So the cross-polygon can be pictured as a square turned up on a corne
r like a diamond." }}{PARA 0 "" 0 "" {TEXT -1 449 " If we con
tinue the process in 3-space. We place a point on the positive z-axis
and another opposite it on the negative z-axis. Each of these points
can be placed equidistant from the plane of the square, so each can b
e placed equidistant from its corners. Next, we connect the top and b
otton points to these four vertices, but not to each other. (If oppos
ites were connected, the edge would always lie on the interior of the \+
polytope.)" }}{PARA 0 "" 0 "" {TEXT -1 333 " The figure forme
d is a dipyramid with a square base. A dipyramid is simply two pyrami
ds with congruent bases stuck together, hiding their common base. Thi
s dipyramid has four edges coming from every vertex, and every face is
an equilateral triangle. There are eight of these faces, so the obje
ct is called an octahedron." }}{PARA 0 "" 0 "" {TEXT -1 429 " \+
Continuing this process will place two points on the fourth axis thro
ugh the origin, so that these points do not lie in the same hyperplane
as the other six. Each of them is connected to the other six with an
edge of equal length. Thus, the figure formed is a four-dimensional \+
\"dipyramid\" with an octahedral base. Pyramids in 4-space are simply
three-dimensional objects connected to an apex out of their hyperplan
e." }}{PARA 0 "" 0 "" {TEXT -1 218 " Like the processes which
generated regular simplices and measure polytopes, this construction \+
can be repeated for every independent axis in n-space. Hence, a cross
-polytope is well defined in all dimensions." }}{PARA 0 "" 0 "" {TEXT
-1 0 "" }}{PARA 0 "" 0 "" {TEXT 268 9 "Structure" }}{PARA 0 "" 0 ""
{TEXT -1 803 " Given the construction rule above, the structu
re of the cross polytope should be fairly easy to imagine. The number
of vertices increases by two with each dimension, so the 4-cross has \+
eight corners. Because the cells are simplices, each face is a triang
le. There are 4 edges in a square and 12 edges in the octahedron. Th
e number of edges increases by twice the number of vertices of the pre
vious cross, since each new vertex is joined to each other vertex. Th
us, the number of edges in the cross polytope is 24. Each of these 24
edges is contained in four tetrahedra (since four meet at an edge) so
the number of cells is equal to 4 times 24 divided by the number edge
s in a tetrahedron (6). Thus, there are 16 cells in the cross polytop
e (and it is often referred to as the 16-cell)." }}{PARA 0 "" 0 ""
{TEXT -1 500 " Another way of looking at these 16 cells is th
is. When an octahedron is formed, the faces are triangles with the ed
ges of the square as a base. Likewise, the two points placed \"above
\" and \"below\" the octahedron are connected in such a way that each \+
triangular face becomes the base of a pyramid, specifically, a regular
tetrahedron. Thus, there are 2 tetrahedra for every face of the octa
hedron--one with the \"upper\" point as apex, and one with the \"lower
\" point. Thus, the total is 16." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}
{PARA 0 "" 0 "" {TEXT 269 15 "Schl\344fli Symbol" }}{PARA 0 "" 0 ""
{TEXT -1 549 " The cross polytope is always formed by bringin
g together four simplices of one less dimension and folding them. Tha
t is, the square has four edges, so its symbol is \{4\}. An octahedro
n is composed of trianges meeting four at a vertex. As such, it is re
presented by \{3, 4\}. Constructing the hyperoctahedron about this oc
tahedron generates tetrahedral cells, \{3, 3\}, which meet four at an \+
edge. Thus, the Schl\344fli symbol for the 4-cross is \{3, 3, 4\}. F
urthermore, the Schl\344fli symbol for any cross in n-space is n-1 3's
followed by a 4." }}{PARA 0 "" 0 "" {TEXT -1 401 " From this
notation, we can see that the vertex figure of the cross polytope is \+
\{3,4\}, an octahedron. In fact, the vertex figure of any n-cross is \+
an (n-1) cross, since it will consist of all but the first Schl\344fli
number, which is a number of 3's followed by a 4. Also note that the
dual of \{3,3,4\} is \{4,3,3\}, the hypercube. The dual of any cross
polytope is always the measure polytope." }}{PARA 0 "" 0 "" {TEXT -1
0 "" }}{PARA 0 "" 0 "" {TEXT 270 11 "Coordinates" }}{PARA 0 "" 0 ""
{TEXT -1 254 " The coordinates of the cross polytope are the \+
easiest to find, given the construction above. We can simply place a \+
point one unit along each axis in each direction. Thus, the coordinat
es for the hyperoctahedron are permutations of (\2611,0,0,0)." }}
{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}
{EXCHG {PARA 0 "" 0 "" {TEXT -1 374 " Here is a projected ima
ge of the cross polytope. Notice that it appears as an octahedron wit
h two internal points. Looking at it from the right angle will produc
e a 2-D image on your screen which looks like a small square inside a \+
larger square with all the vertices connected. Choosing any group of \+
four (excluding opposites) will determine a tetrahedral cell." }}
{PARA 0 "> " 0 "" {MPLTEXT 1 0 101 "polygonplot3d(polydecode(project(c
ross,[1,1,2,2])),scaling=constrained,style=wireframe,thickness=2);\n"
}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1
599 " As before, we can vary the projection direction to prod
uce a series of images in 3-space. As the view moves around, the imag
e will change accordingly. Notice that we begin looking down the axis
from the direction (1,0,0,0). So two of the vertices (the two which \+
lie on this axis) are each projected to the center of an octahedron. \+
If you imagine looking at a 2-D image of an octahedron down one of its
axes, you would see a square with a vertex at the center connected to
all of the corners. As the view changes, the two vertices at the cen
ter are no longer in line, so they separate." }}{PARA 0 "> " 0 ""
{MPLTEXT 1 0 201 "display([seq(polygonplot3d(polydecode(project(cross,
[1,evalf(sin(Pi*k/40),2),evalf(sin(Pi*k/40),2),evalf(sin(Pi*k/40),2)])
)),k=0..40)],insequence=true,thickness=2,scaling=constrained,style=wir
eframe);\n" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 439 " Here is \+
a perspective projection of the cross polytope. It is analogous to lo
okinag at an octahedron close to one of its faces. Doing so, you woul
d see a large triangle containing a smaller, inverted triangle with ad
jacent vertices connected. This image is essentially a large \"front
\" tetrahedron, containg a smaller \"back\" tetreahedron whose faces a
re joined to the vertices of the larger to form the other tetrahedral \+
cells." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 104 "polygonplot3d(polydecode
(perspproj(cross,[1,1,1,1],1)),scaling=constrained,style=wireframe,thi
ckness=2);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 240 " Here is \+
a series of images of the cross polytope generated by rotating the pol
ytope about a plane in 4-space, and projecting the images with perspec
tive into 3-space sequentailly. The rotation matrix is displayed with
the images." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 113 "i:='i':t:=i*Pi/30:
\nM:=array([[cos(t),-sin(t),0,0],[sin(t),cos(t),0,0],[0,0,cos(t),-sin(
t)],[0,0,sin(t),cos(t)]]);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 156 "disp
lay([seq(polygonplot3d(polydecode(perspproj(multpoly(cross,M),[1,1,1,1
],1)),scaling=constrained,style=wireframe,thickness=3),i=1..15)],inseq
uence=true);" }}{PARA 11 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "" 0
"" {TEXT -1 1 " " }}{PARA 0 "" 0 "" {TEXT -1 186 " More inform
ation about the cross polytope, and images of 3-D models, can be found
in the Summary Information section. The next polytope we discuss is \+
simply referred to as the " }{HYPERLNK 17 "24-cell" 1 "24cell.mws" ""
}{TEXT -1 1 "." }}}}{MARK "0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 }