Wie kann ich bei einem Array von Atomen ABABAB in einem hexagonalen Muster Mathematica zum Erstellen verwenden? mit einem hexagonalen Gitter (unendlich) mit diesem Array, so dass jedes Atom A nur von B-Atomen umgeben ist und umgekehrt.

Kommentare

  • Hola Jose , willkommen bei Mathematica.SE. Meinen Sie grafisches Gitter, eine notwendigerweise endliche Darstellung oder eine analytische Beschreibung eines Gitters? Wahrscheinlich könnten Sie mehr Details darüber geben, was Sie damit vorhaben, damit es Ihnen leichter hilft.
  • ein endliches Gitter, das durch ein hexagonales Muster mit 2 Atomen gegeben ist, zum Beispiel wie dieses google.es/… , aber mit 2 Atomen statt einem (Graphen)
  • Verwandte: 19165 , 14632 .
  • Auch verwandt: Wolfram-Demo
  • Einige Kenntnisse der Festkörperphysik erleichtern dies.

Antwort

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}}] } 

Dadurch wird die Einheitszelle

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

Einheitszelle

Wir platzieren es in einem Gitter

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-Gitter


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-Gitter

Kommentare

  • ok danke …: D
  • Großartige Antwort, die sowohl 2d als auch 3d berücksichtigt!

Antwort

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} ] 

Antwort

Eine andere Möglichkeit ist die Verwendung von GeometricTransformation, die möglicherweise schneller gerendert wird, jedoch durch .

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} ] ] }] ] 

Ausgabe des hexagonalen Gitters

Dies funktioniert nicht, ohne $IterationLimit zu erhöhen, wenn Sie {16, 16} durch {128, 128}.

Antwort

Es gibt nur wenige Ressourcenfunktionen, die beim Erstellen hexagonaler Gitter helfen können . Der folgende Code stammt aus den Beispielen von 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}] 

Geben Sie hier die Bildbeschreibung ein.

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

Geben Sie hier die Bildbeschreibung ein.

HexagonalGridGraph

(Beachten Sie, dass diese Funktion von Wolfram Research übermittelt wird.)

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

Geben Sie hier die Bildbeschreibung ein.

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}] 

Geben Sie hier die Bildbeschreibung ein

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.