Hi JosLeys,
I used the fact that the elliptic, euclidean and hyperbolic plans (spaces) can be "immersed" in a higher dimensional linear space. This is called the projective interpretation. The advantage of such model is that we will only manipulate (hyper) planes. The elliptic plane is seen as a (hyper) sphere imbedded in a 3D (4D) euclidean space where the dot product is as usual (with signature (+ + + +)). The euclidean plan (space) is seen as a (hyper) plane imbedded into the 3D (4D) affine space where the dot product have signature (+ + + 0). The hyperbolic plane (space) is seen as the (upper) unit hypeboloid imbedded in the Minkowski space where the dot product have the signature (+ + + -) (or (- - - +). it's a matter of convension).
The generation of the planes defining the fundamental domain is exactly the same as for polyhedra. I begin from the Coxeter group which defines the angles between those planes. In the case of a polyhedra we have 3 planes. There are 3 angles, one for each pair of planes. Each of those angles gives a linear equation where the dot product of the normals of the two planes is equal to -cos(angle) (The convention I choose is that the normals point inside the fundamental domain). The problem here (weel in fact it is not a problem) is that we have 3 normal vectors each with 2 degrees of freedom (because they are normalized) which gives 6 degrees of freedom and we have only 3 equations. the system is underconstrained. The 3 remaining degrees of freedom correspond exactly to arbitrary rotation (and symmetries). Thus, we have to arbitrarily choose some of the components of our normal vectors.
Let's consider the symmetries of the dodecahedron: the corresponding Coxeter group is:
5
*-*-*
a c b
a,b and c are our three normal vectors. each one corresponds to a dot (star) in the diagram. Thus we have the three equations:
<a|b>=0
<a|c>=-cos(PI/5)
<c|b>=-cos(PI/3)=-1/2
I choose to fix the components of 'a' to (1,0,0).
b==(b0,b1,0). Because 'a' is orthogonal to 'b' we have b0=0 and b1=1.
Now, c==(c0,c1,c2).
<a|c>=c0=-cos(PI/5)
<b|c>=c1=-cos(PI/3)=-1/2
because c must have unit norm, we have c0²+c1²+c2²=1
Thus c3=sqrt(1-c0²-c1²)=sqrt(3/4-cos²(PI/5))
The choice of the componenets of a and b is not arbitrary. First reason is that I'll just have to use abs() function to perform folding about a and b. The second reason is that I wanted the vertices of the fundamental domain (the intersection of the 3 pairs of planes plus the unit sphere) to have positive components. These are just practical choises, the first simplify the computations a lot, the second in order to not get lost

.
Concernig the vertices of the fundamental domain, at first I wanted them to be on the unit sphere. That was not good because I couldn't obtain simply the vertex of the uniform polyhedra from a weighted sum of the vertices of the fundamental domain. It's not linear. The solution is very simple: The three verices have to be pab=abs(a*b), pbc=abs(b*c) and pac=abs(a*c) and normalized afterward. '*' is the cross product.
Why?
Let's take for example the Rhombicosidodecahedron: it's vertex 'p' have to be at the same distance to each of the fundamental domain planes. it will be:
p = pab + pbc + pac = abs(a*b) + abs(b*c) + abs(a*c)
it's distance to eache plane is:
d(p,a)=<p|a>= <abs(a*b)|a> + <abs(b*c)|a> + <abs(a*c)|a> = <abs(b*c)|a> = abs((a,b,c))
d(p,a)=<p|b>= <abs(a*b)|b> + <abs(b*c)|b> + <abs(a*c)|b> = <abs(a*c)|b> = abs((a,b,c))
d(p,a)=<p|c>= <abs(a*b)|c> + <abs(b*c)|c> + <abs(a*c)|c> = <abs(a*b)|c> = abs((a,b,c))
which is the same value!
(Despite the abs() these equalities hold because of the convensions we used.)
(a,b,c) is the triple product. it is the volume of the parallelepiped defined by a,b and c.
It's easy to verify the case of the other uniform polyhedrons.
It is remarkable that it works also in the case of the polychora and also for hyperbolic tesselations/honeycombs. in the 4D case the cross product a*b is replaced by its 4D generalisation: *(a,b,c). see (
http://en.wikipedia.org/wiki/Cross_product#Multilinear_algebra).
The case of the polychora is exactly the same. The system of eqations defining the normal vectors is derived from the coxeter group. we will have 6 equations for 12 degrees of freedom. The 6 remaining degrees of freedom are the isometries (rotations and reflexions) of the 4D Eclidean space.
In the case of the hyperbolic tesselations/honeycombs, the dot product have (+++-) signature. The cosine of the angle between the (hyper) planes is still the dot product of their normals because they are space-like. The vertices of the fundamental domain are time-like. They are also computed using the generalisation of the cross produt ... well... one have to be very careful with the signs and the type of the vectors at hand!
Some interesting papers that helped me understand (to some extent):
The projective interpretation of the eight 3-dimensional homogeneous geometries (a little bit technical)
Hyperbolic Geometry (see figure 5 for correspondance between the different models of the hyperbolic plane)
Generating and Rendering Four-Dimensional PolytopesReal-Time Rendering in Curved SpacesBTW, here are the fragmentarium scripts updated with the names of the honeycombs as described in wikipedia (see the presets).