Re: hexagon tiled torus
- To: mathgroup at smc.vnet.net
- Subject: [mg20667] Re: hexagon tiled torus
- From: Martin Kraus <Martin.Kraus at informatik.uni-stuttgart.de>
- Date: Sun, 7 Nov 1999 02:10:04 -0500
- Organization: Institut fuer Informatik, Universitaet Stuttgart
- References: <7vrc11$2n2@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Guilherme Roschke wrote: > > I am trying to draw a torus tiled with regular hexagons. I've been able > to modify the torus in <<Graphics`Shapes` to give one tiled by triangles, > but no luck with regular hexagons. > > to make triangles > > <<Graphics`Shapes` > torus=Show[Graphics3D[Torus[]]]; > triangles=Show[torus/.Polygon[{a_,b_,c_,d_}]:>{Polygon[{a,b,c}],Polygon[{a,c,d}]}]; > > anybody have any references to digital/computational geometry books that > might cover this problem? > > -guilherme > I don't, sorry. Here is some code: Generate a Graphics object (called flatGraphics) with the "texture" (hexagons here): edge = 1; nx = 20; ny = 12; hexagons = Table[N[Polygon[ Table[{If[OddQ[i], edge Sin[Pi/3], 0] + 2 edge Sin[Pi/3] j, 3/2 i} + {edge Sin[Pi/3], edge} + edge {Sin[phi], -Cos[phi]}, {phi, 0, 2 Pi, 2 Pi/6}]]], {i, 0, ny - 1}, {j, 0, nx - 1}]; flatGraphics = Graphics[hexagons, PlotRange -> {{0, nx edge 2 Sin[Pi/3]}, {0, ny edge 3/2}}]; Define a function to map the "texture" onto a three-dimensional surface (given as a function of two coordinates): EmbedIn3D[ g_Graphics, {fx_, fy_, fz_}, {u_, umin_, umax_}, {v_, vmin_, vmax_}] := Module[{x, y, xmin, ymin, xmax, ymax, g1, g2, g3}, {{xmin, xmax}, {ymin, ymax}} = FullOptions[g, PlotRange]; g2 = Evaluate[ g][[1]] /. {{x_?NumberQ, y_?NumberQ} :> {(x - xmin)/(xmax - xmin)*(umax - umin) + umin, (y - ymin)/(ymax - ymin)*(vmax - vmin) + vmin}}; (* map coordinates to ranges of u and v *) g3 = g2 /. {{x_?NumberQ, y_?NumberQ} :> ({fx, fy, fz} /. {u :> x, v :> y})}; Graphics3D[g3]] Use it for a torus with the hexagons as texture: rTorus = 10; rTube = 5; Show[EmbedIn3D[flatGraphics, rTorus {Cos[phi], Sin[phi], 0} + rTube{Cos[phi] Cos[theta], Sin[phi] Cos[theta], Sin[theta]}, {phi, 0, 2 Pi}, {theta, 0, 2 Pi}]]; There are several problems of this solution, but it might be good enough in your case. Greetings Martin Kraus