Re: Hexagonal indexing?
- To: mathgroup at smc.vnet.net
- Subject: [mg67694] Re: Hexagonal indexing?
- From: "ben" <benjamin.friedrich at gmail.com>
- Date: Wed, 5 Jul 2006 04:17:10 -0400 (EDT)
- References: <e8d12i$54k$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
I would be interested in the answer myself.
Recently I programed a biased random walk on a hexagonal lattice,
facing similiar problems with indexing: if indices i and j cound
rows and columns in your hexagonal lattice, the formula for the
midpoint
of hexagon [i,j] has to use the parity of j.
Maybe the code below is of some help.
Bye
Ben
hexagon=Transpose@({Re[#],Im[#]})&@Table[Exp[2\[Pi] I i/6],{i,0,6}]
\!\({{1, 0}, {1\/2, \@3\/2}, {\(-\(1\/2\)\), \@3\/2}, {\(-1\),
0}, {\(-\(1\/2\)\), \(-\(\@3\/2\)\)}, {1\/2, \(-\(\@3\/2\)\)},
{1, 0}}\)
(* Colors *)
White=RGBColor[1,1,1];
Black=RGBColor[0,0,0];
Red=RGBColor[1,0,0];
Blue=RGBColor[0,0,1];
Green=RGBColor[0,1,0];
PutHexAt[x_,y_,col_]:=Graphics@{col,Polygon[hexagon+Table[{x,y},{i,7}]]};
imax=10; jmax=20;
hexlist0=Table[
PutHexAt[3 i+1.5 Mod[j,2] ,Sqrt[3]/2
j,RGBColor[i/imax,i/imax,1]],{i,
imax},{j,jmax}];
Show[hexlist0,AspectRatio\[Rule]1];
pos0={imax/2,jmax/2+1};
framelist={};
(* little program *)
pos=pos0;
hexlist=hexlist0;
iframe=0;
frames={};
While[pos[[1]]>1 && pos[[1]]<imax && pos[[2]]>1 && pos[[2]]<jmax,
dice=Random[Integer,5];
If[dice>3,nsteps=2,nsteps=1];
Do[
dir=Switch[Mod[pos[[2]],2],
1,Switch[dice,
0,{0,2},
1,{1,1},
2,{1,-1},
3,{0,-2},
4,{0,-1},
5,{0,1}],
0,Switch[dice,
0,{0,2},
1,{0,1},
2,{0,-1},
3,{0,-2},
4,{-1,-1},
5,{-1,1}]];
(* mark old pos *)
i=pos[[1]]; j=pos[[2]];
hexlist[[i,j]]=PutHexAt[3 i+1.5 Mod[j,2] ,Sqrt[3]/2 j,Green];
(* new pos *)
pos=pos+dir;
(* mark new pos *)
i=pos[[1]]; j=pos[[2]];
hexlist[[i,j]]=PutHexAt[3 i+1.5 Mod[j,2] ,Sqrt[3]/2 j,Red];
AppendTo[frames,Show[hexlist,DisplayFunction\[Rule]Identity]],
{dummy,nsteps}];
]
AppendTo[framelist,frames];
Show[frames,DisplayFunction\[Rule]$DisplayFunction];
AES schrieb:
> Partly out of a practical problem, partly out of curiousity, are there
> any standard conventions for "hexagonal indexing"? -- that is, for
> attaching a single index k or a double index [m, n] to the points in
> a planar hexagonal array so that one can conveniently do things like
>
> --FInd the 6 nearest neighbors {m', n'] to a point [n, m] ?
>
> --Find the coordinates of an arbitrary array point relative to an
> optimally chosen origin or center?
>
> --Find the distances between two array points [m', n] and [m", n"] ?
>
> --Find all the array points on the outer rim of a finite hexagonal array
> having 6 identical flat faces, or a finite hexagonal array maximally
> filling a spherical shell?
>
> --Efficiently convert the double indices (if used) to a single Mathematica
> style array index?
>
> I can surely work out some of these answers for myself, but I've never
> encountered a "standard method" for doing these, and wonder if there is
> an optimal or conventional approach?