
저는 TikZ가 2차원 격자에 대한 Brillouin Zones을 그리도록 하려고 노력하고 있지만 지금까지 시도한 어떤 것에도 큰 행운이 없었습니다. 브릴루앙 구역은 기본적으로 격자에서 해당 지점에 가장 가까운 지점 주변의 공간 영역이므로 다음과 유사합니다.보로노이 다이어그램. 첫 번째, 두 번째, 세 번째 브릴루앙 구역이 그려진 이 이미지에서 이것이 어떻게 보이는지 확인할 수 있습니다.
(원천:eelvex.net)
이것을 손으로 그린다면 격자의 중심점에서 각 점까지 1 거리만큼 선을 그려서 첫 번째 브릴루앙 구역을 구성할 것입니다(격자 점을 단위 거리만큼 분리함). 중심점부터 북쪽, 동쪽, 남쪽, 서쪽이 될 것입니다. 그런 다음 각 선의 수직 이등분선(물리학 용어로 브래그 평면)을 사용합니다. 그러면 첫 번째 브릴루앙 구역은 수직 이등분선으로 둘러싸인 영역이 됩니다(위 이미지에서 음영 처리된 회색 영역). 더 높은 구역도 같은 방식으로 구성됩니다. 약간 변형된 설명이 제공됩니다.이 사이트에서. Asymptote에도 코드가 있지만 하드 코딩된 것 같습니다.
TikZ에서 이 작업을 수행할 수 있는 방법이 있습니까? 특정 격자와 브릴루앙 구역 수에 관계없이 수행할 수 있는 방법이 있습니까? Lua를 사용하여 수행하려는 다양한 시도(저는 매우 능숙하지 않습니다)를 포함하여 몇 가지 접근 방식을 시도했지만 성공하지 못했습니다. 그러나 제가 실제로 작업한 유일한 방법은 격자 점을 그리는 방법입니다. 정사각형 격자에 대해서는 여기에 포함되어 있지만 육각형 격자를 제공하기 위해 이를 수정하는 것은 그리 어렵지 않습니다.
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
%%% For a square lattice
\begin{tikzpicture}
\foreach \x in {-2, ..., 2}{
\foreach \y in {-2, ..., 2}{
\fill [black] (\x, \y) circle (0.1);
}
}
\end{tikzpicture}
\end{document}
답변1
TikZ에서 이 작업을 수행할 수 있는 방법이 있습니까? 특정 격자와 브릴루앙 구역 수에 관계없이 수행할 수 있는 방법이 있습니까?
짧은 답변:예!
더 긴 답변:아니요!이 작업은 높은 값의 경우 계산 비용이 많이 들 수 있습니다. 컴파일할 때마다 처음부터 시작하고 싶지 않기 때문에 계산과 표시를 분리해야 합니다. 그리고 별도로 수행하는 경우 특정 격자에 대해 이전에 계산된 항목을 쉽게 저장하고 사용할 수 있는 더 적합한 도구를 사용하는 것은 어떻습니까?!
에 대한 더 긴 답변"예" 부분. LaTeX에서 작동하고 구현할 수 있는 알고리즘은 다음과 같습니다(실제로는 그렇게 해서는 안 됩니다). 이 설명은 실제로 색칠에 대한 "폐쇄된 공식"을 암시하지 않기 때문에 약간 "해킹"적입니다(아마도 존재하지 않을 수도 있습니다).
나는 다음이 효과가 있다고 생각합니다. 그리고 이 진술은 알고리즘의 귀납적 특성에 기반을 두고 있습니다.
- 수직 이등분선을 계산합니다.
- 모든 이등분선 쌍에 대한 교점(있는 경우)을 계산합니다.
- 만들기데이터 구조교차점에 의해 색인이 생성되고 교차점을 통과하는 선이 포함된 목록이 있습니다.
- 내부 정사각형(
k=0
사각형)에서 가장자리 목록을 만듭니다. 허락하다k=1
. - 가장자리 목록과 교차점을 기반으로 합니다(여기에는벡터와 벡터의 외적을 이용한 끝없는 재미) 선체의 모든 가장자리에서 CW(시계 방향)(짝수인 경우 CCW)로 시작 하고 돌아올 때까지 매번
k
가장 왼쪽(짝수인 경우 가장 오른쪽)으로 이동합니다 .k
이제 에 대한 영역이 생겼습니다k
. 모든 가장자리에 대해 그렇게하십시오. 새 (선체) 가장자리 목록을 저장하고 다음 반복에서 사용합니다. 3단계에서 생성한 색인을 사용하여 교차로에서 어디로 갈 수 있는지, 어느 것이 가장 왼쪽(가장 오른쪽)인지 결정할 수 있습니다. k
원하는 만큼 1씩 늘리고 5~6을 반복하세요.
이는 여러 가지 방법으로 알고리즘적으로 개선될 수 있지만 시작하는 것이 좋습니다.
데이터 포인트를 성공적으로 계산한 후에는 다음과 같이 tikz 명령을 사용하여 모양을 그릴 수 있습니다.\fill[red] (0,-1) -- (1,0) -- (0,1) -- (-1,0) -- cycle;
또 다른 가능성은 선을 갖고 (비트맵) 이미지에 대해 픽셀 단위로 색상을 계산하는 것입니다. 크지 k
만 작은 그림이 있으면 훨씬 더 좋을 수 있습니다 .
위의 것보다 더 나은 접근 방식을 기대하면서 귀하의 질문에 현상금을 제공했습니다. 불운.