Gegeven een array van atomen ABABAB in een hexagonaal patroon, hoe kan ik Mathematica gebruiken om met een hexagonaal rooster (oneindig) met deze array, zodat elk atoom A alleen wordt omringd door B-atomen en vice versa.

Opmerkingen

  • Hola Jose , welkom bij Mathematica.SE. Bedoel je een grafisch rooster, een plot dat noodzakelijkerwijs eindig is, of een analytische beschrijving van een rooster? Waarschijnlijk zou je meer details kunnen geven over wat je ermee wilt doen, zodat het gemakkelijker is om je te helpen.
  • een eindig rooster gegeven door een hexagonaal patroon met 2 atomen bijvoorbeeld zoals dit google.es/… maar met 2 atomen in plaats van één (grafeen)
  • Gerelateerd: 19165 , 14632 .
  • Ook gerelateerd: Wolfram Demo
  • Enige kennis van Solid State Physics maakt het gemakkelijker.

Antwoord

In 2D

unitCell[x_, y_] := { Red , Disk[{x, y}, 0.1] , Blue , Disk[{x, y + 2/3 Sin[120 Degree]}, 0.1] , Gray, , Line[{{x, y}, {x, y + 2/3 Sin[120 Degree]}}] , Line[{{x, y}, {x + Cos[30 Degree]/2, y - Sin[30 Degree]/2}}] , Line[{{x, y}, {x - Cos[30 Degree]/2, y - Sin[30 Degree]/2}}] } 

Hierdoor wordt de eenheidscel gemaakt

Graphics[unitCell[0, 0], ImageSize -> 100] 

Eenheidscel

We plaatsen het in een rooster

Graphics[ Block[ { unitVectA = {Cos[120 Degree], Sin[120 Degree]} ,unitVectB = {1, 0} }, Table[ unitCell @@ (unitVectA j + unitVectB k) , {j, 1, 12} , {k, Ceiling[j/2], 20 + Ceiling[j/2]} ] ], ImageSize -> 500 ] 

2D Hex Lattice


In 3D

unitCell3D[x_, y_, z_] := { Red , Sphere[{x, y, z}, 0.1] , Blue , Sphere[{x, y + 2/3 Sin[120 Degree], z}, 0.1] , Gray , Cylinder[{{x, y, z}, {x, y +2/3 Sin[120 Degree], z}}, 0.05] , Cylinder[{{x, y, z}, {x + Cos[30 Degree]/2, y - Sin[30 Degree]/2, z}}, 0.05] , Cylinder[{{x, y, z}, {x - Cos[30 Degree]/2, y - Sin[30 Degree]/2, z}}, 0.05] } Graphics3D[ Block[ {unitVectA = {Cos[120 Degree], Sin[120 Degree], 0}, unitVectB = {1, 0, 0} }, Table[unitCell3D @@ (unitVectA j + unitVectB k), {j, 20}, {k, 20}]] , PlotRange -> {{0, 10}, {0, 10}, {-1, 1}} ] 

3D Hex Lattice

Reacties

  • ok bedankt …: D
  • Geweldig antwoord, ik vond het leuk om zowel 2D als 3D te overwegen!

Antwoord

In 2D,

Manipulate[( basis = {{s, 0}, {s/2, s Sqrt[3]/2}}; points = Tuples[Range[0, max], 2].basis; Graphics[Point[points], Frame -> True, AspectRatio -> Automatic]) , {s, 0.1, 1} , {max, 2, 10} ] 

Antwoord

Een andere manier is om GeometricTransformation te gebruiken, wat mogelijk sneller wordt weergegeven, maar wordt beperkt door $IterationLimit.

With[{base = Line[{ {{-(1/2), -(1/(2 Sqrt[3]))}, {0, 0}}, {{0, 0}, {0, 1/Sqrt[3]}}, {{0, 0}, {1/2, -(1/(2 Sqrt[3]))}} }] }, Graphics[{ GeometricTransformation[ base, Flatten@Array[ TranslationTransform[ {1/2, -(1/(2 Sqrt[3]))} + {#1 + If[OddQ[#2], 1/2, 0], #2 Sqrt[3]/2} ] &, {16, 16} ] ] }] ] 

Uitvoer van hexagonaal rooster

Dit werkt niet zonder $IterationLimit te verhogen wanneer u {16, 16} vervangt door {128, 128}.

Antwoord

Er zijn weinig bronfuncties die kunnen helpen bij het maken van zeshoekige roosters . De onderstaande code is afkomstig uit de voorbeelden van HextileBins .

HextileBins

hexes2 = Keys[ ResourceFunction["HextileBins"][ Flatten[Table[{x, y}, {x, 0, 16}, {y, 0, 12}], 1], 2]]; Graphics[{EdgeForm[Blue], FaceForm[Opacity[0.1]], hexes2}] 

voer hier de beschrijving van de afbeelding in

lsBCoords = Union[Flatten[First /@ hexes2, 1]]; 
Graphics[{EdgeForm[Blue], hexes2 /. Polygon[p_] :> Line[Append[p, First[p]]], Red, PointSize[0.02], Point[lsBCoords]}] 

voer hier een beschrijving van de afbeelding in

HexagonalGridGraph

(Merk op dat deze functie afkomstig is van Wolfram Research.)

grHex = ResourceFunction["HexagonalGridGraph"][{16, 12}] 

voer hier een afbeeldingbeschrijving in

lsVCoords = GraphEmbedding[grHex]; lsVCoords[[1 ;; 12]] 
(* {{0, 0}, {0, 2}, {Sqrt[3], -1}, {Sqrt[3], 3}, {2 Sqrt[3], 0}, {Sqrt[ 3], 5}, {2 Sqrt[3], 2}, {2 Sqrt[3], 6}, {3 Sqrt[3], -1}, {3 Sqrt[3], 3}, {2 Sqrt[3], 8}, {3 Sqrt[3], 5}} *) 
grHexPolygons = Map[Polygon@(List @@@ #)[[All, 1]] &, FindCycle[grHex, {6, 6}, All]] /. v_Integer :> lsVCoords[[v]]; Graphics[{EdgeForm[Blue], FaceForm[Opacity[0.2]], grHexPolygons}] 

voer de beschrijving van de afbeelding hier in

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *