Consider a unit sphere. The cube of the maximum size that can be inscribed inside it has the vertices $ (\pm1, \pm1, \pm1)/\sqrt3 $. A tetrahedron can be created from this cube by choosing appropriate vertices. A tetrahedron has 4 faces and I need 4 great circles of the unit sphere that are parallel to these faces. Then I need to arrange 8 points such that their distance from the great circles is maximized. How do I do it?
1 Answer
We first define the points of the cube and tetrahedron. From the tetrahedron points, we choose all subsets of 3 points, defining the surfaces of the tetrahedron.
cube = Flatten[
Table[{x1, x2, x3}, {x1, -1, 1, 2}, {x2, -1, 1, 2}, {x3, -1, 1,
2}], 2];
tetr = cube[[{1, 4, 6, 7}]];
surf = Subsets[tetr, {3}];
From the 3 points defining a surface, we take the cross product to get a vectors perpendicular to the surfaces:
perpend = Cross[#[[2]] - #[[1]], #[[3]] - #[[1]]] & /@ surf;
Now we would like to define a 3D circle that we can then rotate. Here we met a small problem, because in MMA we only have 2D circles. We may draw a 3D circle using ParametricPlot
, but this can not easily be rotated because only graphics primitives can be easily rotated. We therefore dig out the 3D line from the output of ParametricPlot
:
circle = ParametricPlot3D[{Cos[p], Sin[p], 0}, {p, 0, 2 Pi}][[1, 1, 1, 3, 1, 3]];
This circle can now be rotated using Rotate
. And we now rotate the original circle to the directions given in perpend:
Graphics3D[{Rotate[circle, {{0, 0, 1}, #}] & /@ perpend, Opacity[0.5],
Sphere[]}, Axes -> True, AxesLabel -> {"x", "y", "z"}]