My question is: how to find the coordinates of the vertices of regular tetrahedron and dodecahedron? I tried to find the coordinates of the vertices of a regular tetrahedron as the solutions of a certain polynomial system in $8$ variables, notating the vertices of a tetrahedron $S(0,0,1)$, $A(0,yA,zA)$, $B(xB,yB,zB)$, and $C(xC,yC,zC)$:
Reduce[
yA^2 + zA^2 == 1 &&
xB^2 + yB^2 + zB^2 == 1 &&
xC^2 + yC^2 + zC^2 == 1 &&
yA^2 + (zA - 1)^2 == xB^2 + yB^2 + (zB - 1)^2 &&
yA^2 + (zA - 1)^2 == xC^2 + yC^2 + (zC - 1)^2 &&
xB^2 + (yB - yA)^2 + (zB - zA)^2 ==
xC^2 + (yC - yA)^2 + (zC - zA)^2 &&
xB^2 + (yB - yA)^2 + (zB - zA)^2 ==
(xC - xB)^2 + (yC -yB)^2 + (zC - zB)^2 &&
xB^2 + (yB - yA)^2 + (zB - zA)^2 ==
yA^2 + (zA - 1)^2,
{xB, xC, yA, yB, yC, zA, zB, zC}, Reals]
However, that code is spinning for hours without any output. A new idea is required.
P.S. 12.12.13. The answer done with Maple can be seen at http://mapleprimes.com/questions/200438-Around-Plato-And-Kepler-Again. Because nothing but trigonometry is used, I am pretty sure all that is possible in Mathematica.
Answer
Invariant theory construction
We can use Klein's invariants ($\Phi'$ on page 55, $H$ on page 61, Lectures on the Icosahedron) and project the complex roots onto the Riemann sphere, borrowing ubpdqn's projection code:
tetraPoly = -z1^4 - 2 Sqrt[3] z1^2 z2^2 + z2^4;
dodecaPoly = z1^20 + z2^20 - 228 (z1^15 z2^5 - z1^5 z2^15) + 494 z1^10 z2^10;
(* project onto the Riemann sphere *)
sph[z_?NumericQ] :=
Module[{den}, den = 1 + Re[z]^2 + Im[z]^2; {2 Re[z]/den, 2 Im[z]/den, (den - 2)/den}];
vTetra2 = sph[z1] /. Solve[(tetraPoly /. z2 -> 1) == 0, z1];
vDodeca2 = sph[z1] /. Solve[(dodecaPoly /. z2 -> 1) == 0, z1];
nf = Nearest[N@vDodeca2 -> Automatic];
edgeIndices2 =
Flatten[Cases[nf[vDodeca2[[#]], 4], n_ /; n > # :> {#, n}] & /@ Range[1, 19], 1];
Tetrahedron:
Graphics3D[GraphicsComplex[vTetra2,
{Darker@Green, Thick, PointSize[Large],
Point[Range@4],
Line[Subsets[Range@4, {2}]]
}]
]
Dodecahedron:
Graphics3D[GraphicsComplex[vDodeca2,
{Darker@Green, Thick, PointSize[Large],
Point[Range@20],
Line[edgeIndices2]
}]
]
Comments
Post a Comment