Inspired by F'x, here's a 2D analogue of spikey. Done with a bunch of rules because I like them, and they make it clear what is going on.
Start with a pentagon:
p = Polygon[Table[N[{Cos[t], Sin[t]}], {t, \[Pi]/10, 2 \[Pi], (2 \[Pi])/5}]];
Make a rule to split any polygon into triangles (centroid to each edge):
triangulate = Polygon[v_] :> (Polygon[Append[#, Mean[v]]] & /@ Partition[v, 2, 1, {1, 1}]);
A rule to split triangles into the spikey face structure:
moretriangles = Polygon[{a_, b_, c_}] :>
With[{ab = (a + b)/2, bc = (b + c)/2, ca = (c + a)/2}, {
Polygon[{a, ab, ca}],
Polygon[{ab, b, bc}],
Polygon[{c, ca, ab}],
Polygon[{c, ab, bc}]
}];
Put a triangle inside each triangle (which will be done twice):
shrink = Polygon[{a_, b_, c_}] :>
With[{aa = (6 a + b + c)/8, bb = (a + 6 b + c)/8, cc = (a + b + 6 c)/8}, {
Polygon[{a, b, bb, aa}],
Polygon[{b, c, cc, bb}],
Polygon[{c, a, aa, cc}],
Polygon[{aa, bb, cc}]
}];
Add some colour:
colour4 = q : Polygon[{_, _, _, _}] :> {ColorData["NeonColors"][RandomReal[]], q};
colour3 = q : Polygon[{_, _, _}] :> {RGBColor[0.6, 0.12, 0.12], q};
Split each polygon edge into a series of small steps, so we will get curves when we transform it:
curve = Polygon[v_] :> FilledCurve[
Line[Map[{10 - #, #}/10 &, Range[0, 10]].#] & /@
Partition[v, 2, 1, {1, 1}]];
The hyperbolic transformation:
f[r_] := Re[(ArcSin[2 r - 1] + \[Pi]/2)/2];
bolics = v : {_?NumberQ, _} :> f[Norm[v]] v;
to finally give:
Graphics[p /. triangulate /. moretriangles /. shrink /. shrink /. colour3 /. colour4 /.
curve /. bolics]
EDIT
Now with better different colours!
Clear[colour4];
colour4[s_] := q : Polygon[{_, _, _, _}] :> {ColorData[s][RandomReal[]], q};
SeedRandom[8];
Graphics[p /. triangulate /. moretriangles /. shrink /. shrink /. colour3 /.
colour4["SouthwestColors"] /. curve /. bolics]
And some badges with the hyperbolic polygon theme:
Clear[bolics2];
bolics2[s_] := v : {_?NumberQ, _} :> (s f[Norm[v]] + 1 - s) v;
Clear[poly];
poly[start_, n_] := Polygon[Table[N[{Cos[t], Sin[t]}], {t, start, 2 \[Pi], (2 \[Pi])/n}]];
Grid[List[Graphics[{Gray, Translate[#[[2]], {0, -0.2}], #}, ImageSize -> 15] & /@
{{RGBColor[237/255, 198/255, 47/255], poly[\[Pi]/10, 5] /. curve /. bolics2[1]},
{RGBColor[218/255, 218/255, 218/255], poly[0, 4] /. curve /. bolics2[2/3]},
{RGBColor[226/255, 154/255, 84/255], poly[\[Pi]/2, 3] /. curve /. bolics2[1/2]}}]]
Addendum by J.M.
I wasn't too fond of our proposed logo having a Random*
component, and set about looking for a slightly more systematic coloring scheme. Here is what I came up with:
colour3[s_: LightGray] := q : Polygon[{_, _, _}] :> {s, q}
PolygonCentroid[pts_?MatrixQ] := With[{dif = Map[Det, Partition[pts, 2, 1, {1, 1}]]},
ListConvolve[{{1, 1}}, Transpose[pts], {-1, -1}].dif/(3 Total[dif])]
colour4[s_: "SouthwestColors"] := Polygon[v_] /; Length[v] == 4 :>
{ColorData[s, (7 Norm[PolygonCentroid[v], 2] - 2)/4], Polygon[v]}
Graphics[p /. triangulate /. moretriangles /. shrink /. shrink /.
colour3[] /. colour4[] /. curve /. bolics]