技術ドキュメント: zone_axes.py

プログラムの動作

zone_axes.py は、結晶学における立方晶系の結晶面とゾーン軸の関係を3次元で可視化するためのPythonスクリプトです。このプログラムは、指定されたミラー指数 (hkl) に基づいて複数の結晶面をプロットし、特定のゾーン軸(ここでは [001])と各結晶面の法線ベクトルも描画します。

主な機能は以下の通りです。

  • 結晶面の可視化: ミラー指数 (hkl) を用いて、立方晶系の結晶面を3D空間に描画します。

  • ゾーン軸の表示: 指定されたゾーン軸(デフォルトでは [001])をベクトルとして可視化し、ラベルを付与します。

  • 法線ベクトルの表示: 各結晶面に対して、その法線ベクトルを破線で表示し、ラベルを付与します。

  • グラフの保存と表示: 生成された3DグラフはPNG画像ファイルとして保存され、同時に画面上に表示されます。

このプログラムは、結晶面の概念、ミラー指数、ゾーン軸、および法線ベクトルの間の空間的な関係を視覚的に理解するのに役立ちます。

原理

このプログラムは、結晶学におけるいくつかの基本的な概念に基づいています。

  1. ミラー指数 (Miller Indices): 立方晶系における結晶面を記述するための表記法 (hkl) です。面は、結晶軸との切片の逆数の最小整数比で定義されます。

  2. 結晶面の方程式: 結晶面 (hkl) の一般的な方程式は次式で表されます。

    \[hx + ky + lz = d\]

    ここで \(h, k, l\) はミラー指数、\(x, y, z\) は座標、そして \(d\) は原点からの距離に関連する定数です。 plot_plane 関数では、一般の面については \(d=1\) と仮定して面をプロットします。したがって、例えば \(l \ne 0\) の場合、面は \(z = (1 - hx - ky) / l\) として計算されます。 ただし、単一の非ゼロ指数を持つ面(例:(100), (010), (001))については、それぞれ \(x=0\), \(y=0\), \(z=0\) の面としてプロットされます。これは、これらの面が原点を通るように描画され、プロット範囲内に収まるようにするための簡略化です。

  3. ゾーン軸 (Zone Axis): 複数の結晶面が平行な共通の交線を持つ場合、その交線の方向をゾーン軸と呼びます。ゾーン軸は方向指数 [uvw] で表されます。ある方向 [uvw] が面 (hkl) のゾーン軸である場合、以下の関係が成り立ちます。

    \[hu + kv + lw = 0\]

    このプログラムでは、ゾーン軸 [001] を可視化し、この軸に属する(または平行な交線を持つ)複数の面をプロットしています。プロットされる面(例:(110), (120), (010) など)は、全てこの [001] ゾーン軸に属しています。例えば面 (110) とゾーン軸 [001] の関係は \(1 \cdot 0 + 1 \cdot 0 + 0 \cdot 1 = 0\) となり、条件を満たします。

  4. 法線ベクトル: 面 (hkl) の法線ベクトルは、その面に対して垂直な方向を示すベクトルで、方向指数 [h, k, l] で与えられます。プログラムでは、各プロットされた面に対して、その法線ベクトルを原点から伸びる破線として可視化しています。

グラフの描画には Matplotlib ライブラリの3Dプロット機能 (mpl_toolkits.mplot3d) を使用しています。np.meshgrid を用いてグリッドを作成し、その上に計算した \(z\) (または \(y\), \(x\)) の値をプロットすることで表面を描画します。

必要な非標準ライブラリとインストール方法

このプログラムは以下の非標準ライブラリを使用しています。

  • Matplotlib: グラフ描画のためのライブラリです。

  • NumPy: 数値計算(配列操作、数学関数など)のためのライブラリです。

これらのライブラリは pip コマンドでインストールできます。

pip install matplotlib numpy

mpl_toolkits.mplot3d は Matplotlib に含まれているため、別途インストールする必要はありません。

必要な入力ファイル

このプログラムは、外部の入力ファイルを必要としません。 プロットする結晶面(ミラー指数、色、ラベル)およびゾーン軸の情報は、スクリプト内に直接記述されています。

生成される出力ファイル

プログラムを実行すると、以下の画像ファイルが生成されます。

  • cubic_planes_001_zone.png:

    • 内容: 立方晶系の結晶面、ゾーン軸 [001]、および各結晶面の法線ベクトルを3次元で表示したグラフ。

    • 形式: PNG (Portable Network Graphics) 画像ファイル。

このファイルは、スクリプトが実行されたディレクトリに保存されます。

コマンドラインでの使用例 (Usage)

zone_axes.py を実行するには、Pythonインタプリタを使用してスクリプトを直接実行します。引数は必要ありません。

python zone_axes.py

コマンドラインでの具体的な使用例

以下のコマンドは、zone_axes.py スクリプトを実行し、立方晶系の結晶面と [001] ゾーン軸、および法線ベクトルを示す3Dグラフを生成します。

python zone_axes.py

実行が完了すると、cubic_planes_001_zone.png という名前の画像ファイルがカレントディレクトリに生成され、同時にmatplotlibのウィンドウにグラフが表示されます。このグラフには、(110), (120), (010), (1\bar{2}0), (1\bar{1}0) の各結晶面が異なる色で描画され、それぞれに対応する法線ベクトルと共通の [001] ゾーン軸が表示されます。