Slices of polytopes
As was already discussed, the only time when I know how to compute the intersection of P with R^k is when k = D(P) -1 or greater. So, the only way to do slices that I know of is by iterated cross-sections. For instance, to do the slice shown in the terminology section (a slice of a cube by a line), we first take a cross-section of the cube by a plane that contains that line, then take a cross-section of this intermediate result by the line:
This works because since R^(i + 1) contains R^i, we can expand the expression of the slice into the expression of a series of cross-sections:
(let "intx(A,B)" be the intersection of A and B):
slice of P by R^k = intx(R^k,P)
= intx(R^k, intx(R^(k+1),P))
= intx(R^k, intx(R^(k+1), intx(R^(k+2), P)))
...
= intx(R^k, intx(R^(k+1), intx(R^(k+2), ... intx(R^(D(P) - 1), P) ....)))
This justifies using iterated cross-sections to produce the correct slice, as long as we have some dimension to start the cross-sections at. This dimension is D(P) - 1, and the next best thing to D(P) is space_d(P), so space_d(P) - 1 is what will be used to start iterated cross-sections.
Here's how the slicing works in the previous case of the triangle where space_d(P) got to be 3. Suppose we want to slice that triangle with a line in the x-y plane:

Here, space_d(P) was equal to D(P) + 1, so the initial cross-section did nothing except create a new triangle Q which is identical to the first except that space_d(Q) = 2. The next cross-section (the cross-section of Q) does the actual slice of the triangle with the line. The fact that space_d(P) was greater than D(P) wasted some time, but it did no harm.
These examples may seem silly at this dimensional level, but the usefulness of slicing may become apparent in trying to visualize 5 dimensional objects by the use of a two dimensional pattern of 3-slices- perhaps the screen could have a 10 by 10 grid of 3-slices.
Using the cross_object() algorithm previously created, it is simple to create the algorithm slice_object(o, m) which takes an object o and returns its slice by R^m:
slice_object(o, m) {
num <-- space_d(o) - 1 - m;
o2 = o
repeat num times {
o2 = cross_object(o2);
}
return(o2);
}
(back to Contents)