六方晶を直方晶に埋め込む

# 動機と概要
結晶は一般に斜方格子に並んでいるので、その斜方格子をきめる基底を使った係数で座標を導入するのが望ましい。一方、実空間の格子を切ろうとすると、直方格子に切るのが簡単なので、直方格子の基底の係数で評価するのが実装上簡単である。一般の斜方格子は直方格子に埋め込むことができないが、二次元六方格子については二次元長方格子に埋め込める。その係数をまとめた。

# 二つの基底の関係 その１
二次元六方格子の基底
$$
\begin{align}
a_1^h = a{\hat x}, \ 
a_2^h = \frac{1}{2}a{\hat x} + \frac{\sqrt{3}}{2}a{\hat y}
\end{align}
$$

二次元直方格子の基底
$$
\begin{align}
a_1^r = a{\hat x}, \ 
a_2^r = \frac{\sqrt{3}}{2}a{\hat y}
\end{align}
$$

二つの基底の関係
$$
\begin{align}
\begin{cases}
a_1^r = a_1^h, \\\
a_2^r = -\frac{1}{2} a_1^h + a_2^h
\end{cases}\Longleftrightarrow
\begin{cases}
a_1^h = a_1^r, \\\
a_2^h = \frac{1}{2} a_1^r + a_2^r
\end{cases}
\end{align}
$$

## 二つの係数の関係
$$
r = \alpha_1^h a_i^h + \alpha_2^h a_2^h = \alpha_1^r a_i^r + \alpha_2^r a_2^r 
$$

$$
\begin{align}
\begin{cases}
\alpha_1^r = \alpha_1^h + \frac{1}{2} \alpha_2^h, \\\
\alpha_2^r = \alpha_2^h
\end{cases}
\Longleftrightarrow
\begin{cases}
\alpha_1^h =  \alpha_1^r - \frac{1}{2}\alpha_2^r, \\\
\alpha_2^h = \alpha_2^r
\end{cases}
\end{align}
$$

# 鈍角の基底で表現した場合
上と同じ格子を、基底が鈍角になるようにとることもできる。

二次元六方格子の基底
$$
\begin{align}
a_1^h = a{\hat x}, \ 
a_2^h = -\frac{1}{2}a{\hat x} + \frac{\sqrt{3}}{2}a{\hat y}
\end{align}
$$


二つの基底の関係
$$
\begin{align}
\begin{cases}
a_1^r = a_1^h, \\\
a_2^r = \frac{1}{2} a_1^h + a_2^h
\end{cases}\Longleftrightarrow
\begin{cases}
a_1^h = a_1^r, \\\
a_2^h = -\frac{1}{2} a_1^r + a_2^r
\end{cases}
\end{align}
$$

## 二つの係数の関係
$$
r = \alpha_1^h a_1^h + \alpha_2^h a_2^h = \alpha_1^r a_1^r + \alpha_2^r a_2^r 
$$

$$
\begin{align}
\begin{cases}
\alpha_1^r = \alpha_1^h - \frac{1}{2} \alpha_2^h, \\\
\alpha_2^r = \alpha_2^h
\end{cases}
\Longleftrightarrow
\begin{cases}
\alpha_1^h =  \alpha_1^r + \frac{1}{2}\alpha_2^r, \\\
\alpha_2^h = \alpha_2^r
\end{cases}
\end{align}
$$

# 二つの基底の関係 その２
二次元六方格子の基底
$$
\begin{align}
a_1^h = \frac{\sqrt{3}}{2}a{\hat x} - \frac{1}{2}a{\hat y}, \qquad \ 
a_2^h = a{\hat y}
\end{align}
$$

二次元直方格子の基底
$$
\begin{align}
a_1^r = \sqrt{3}a{\hat x}, \qquad \ 
a_2^r = a{\hat y}
\end{align}
$$

二つの基底の関係
$$
\begin{align}
\begin{cases}
a_1^r = 2 a_1^h + a_2^h, \\\
a_2^r =  a_2^h
\end{cases}\Longleftrightarrow
\begin{cases}
a_1^h = \frac{1}{2}a_1^r - \frac{1}{2}a_2^r, \\\
a_2^h = a_2^r
\end{cases}
\end{align}
$$

## 二つの係数の関係
$$
r = \alpha_1^h a_1^h + \alpha_2^h a_2^h = \alpha_1^r a_1^r + \alpha_2^r a_2^r 
$$

$$
\begin{align}
\begin{cases}
\alpha_1^r = \frac{1}{2}\alpha_1^h , \\\
\alpha_2^r = -\frac{1}{2}\alpha_1^h + \alpha_2^h
\end{cases}
\Longleftrightarrow
\begin{cases}
\alpha_1^h =  2\alpha_1^r , \\\
\alpha_2^h = \alpha_1^r + \alpha_2^r
\end{cases}
\end{align}
$$

## サンプルコード

```python:transform.py
import numpy as np
import matplotlib.pyplot as plt

Ah = np.array([[np.sqrt(3)/2.0, 0],[-0.5, 1]])
Ar = np.array([[np.sqrt(3), 0],[0.0, 1]])

alphah = np.zeros([2,4])
alphah[0,0] = 1.0/3.0; alphah[1,0] = 2.0/3.0
alphah[0,1] = 2.0/3.0; alphah[1,1] = 1.0/3.0
alphah[0,2] = 1.0/3.0; alphah[1,2] = 2.0/3.0
alphah[0,3] = 2.0/3.0; alphah[1,3] = 1.0/3.0

print('# Original coordinate, hexagonal lattice')
r = Ah@alphah
for i in range(4):
    print(i, r[:,i])
    
print('# Rectangular lattice')
Rh2r = np.array([[0.5, 0.0],[-0.5, 1.0]]) #座標変換の行列
alphar = Rh2r@alphah
rr = Ar@alphar #rと等しいものが得られるはず
for i in range(4):
    print(i, rr[:,i])

#プロットして確認
plt.figure()
plt.plot([0.0, Ah[0,0]],[0.0, Ah[1,0]],'b--')
plt.plot([0.0, Ah[0,1]],[0.0, Ah[1,1]],'b--')
plt.plot([Ah[0,0], Ah[0,0] + Ah[0,1]],[Ah[1,0], Ah[1,0] + Ah[1,1]],'b--')
plt.plot([Ah[0,1], Ah[0,0] + Ah[0,1]],[Ah[1,1], Ah[1,0] + Ah[1,1]],'b--')
plt.plot([0.0, Ar[0,0]],[0.0, Ar[1,0]],'k-')
plt.plot([0.0, Ar[0,1]],[0.0, Ar[1,1]],'k-')
plt.plot([Ar[0,0], Ar[0,0] + Ar[0,1]],[Ar[1,0], Ar[1,0] + Ar[1,1]],'k-')
plt.plot([Ar[0,1], Ar[0,0] + Ar[0,1]],[Ar[1,1], Ar[1,0] + Ar[1,1]],'k-')
for i in range(4):
    plt.scatter(r[0,i],r[1,i],marker='*',alpha=0.5)
    plt.scatter(rr[0,i],rr[1,i],marker='x',alpha=0.5)
plt.grid()
plt.axis('square')
plt.show()
```