6 각형 패턴의 ABABAB 원자 배열이 주어지면 Mathematica 를 사용하여 어떻게 만들 수 있습니까? 이 배열과 함께 육각 격자 (무한)를 사용하여 각 원자 A는 B 원자로 만 둘러싸이고 그 반대도 마찬가지입니다.
댓글
- Hola Jose , Mathematica.SE에 오신 것을 환영합니다. 그래픽 격자, 반드시 유한 한 플롯 또는 격자에 대한 분석적 설명을 의미합니까? 아마 당신은 당신이 무엇을하려고하는지에 대한 더 자세한 정보를 제공 할 수 있습니다. 그래서 당신을 더 쉽게 도울 수 있습니다.
- 예를 들어이 google.es/ … 그러나 2 개의 원자 대신 1 개 (그래 핀)
- 관련 : 19165 , 14632 .
- 기타 관련 : Wolfram 데모
- 고체 물리학에 대한 일부 지식이이를 용이하게합니다.
답변
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}}] }
그러면 단위 셀이 생성됩니다.
Graphics[unitCell[0, 0], ImageSize -> 100]
격자에 배치
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 ]
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}} ]
댓글
- 감사합니다 … : D
- 2D와 3D를 모두 고려한 좋은 답변입니다!
답변
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} ]
답변
또 다른 방법은 GeometricTransformation
를 사용하는 것입니다.이 방법은 더 빠르게 렌더링 될 수 있지만 .
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} ] ] }] ]
{16, 16}
를 iv로 바꿀 때 $IterationLimit
를 늘리지 않으면 작동하지 않습니다. id = “b4797a8173″>
.
답변
육각형 격자를 만드는 데 도움이되는 리소스 함수는 거의 없습니다. . 아래 코드는 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}]
lsBCoords = Union[Flatten[First /@ hexes2, 1]];
Graphics[{EdgeForm[Blue], hexes2 /. Polygon[p_] :> Line[Append[p, First[p]]], Red, PointSize[0.02], Point[lsBCoords]}]
HexagonalGridGraph
(이 함수는 Wolfram Research에서 제출했습니다.)
grHex = ResourceFunction["HexagonalGridGraph"][{16, 12}]
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}]