ミラー指数計算機 - 結晶面の切片を(hkl)に変換
結晶面がx軸、y軸、z軸と交わる切片の値から、逆数を取って整数化するミラー指数(h,k,l)を計算する無料ツール。計算に使う公式と具体的な計算例、結晶構造をわかりやすく示す図解も提供し、結晶学やX線回折分析、材料科学の研究、大学の授業における理解の助けとして幅広く役立つ。
ミラー指数計算機
結晶面の切片
結晶面のx、y、z軸との切片を入力してください。軸に平行な面は「∞」または「infinity」を使用します。
数値または∞(無限大、軸に平行)を入力してください
数値または∞(無限大、軸に平行)を入力してください
数値または∞(無限大、軸に平行)を入力してください
可視化
ミラー指数とは?
ミラー指数は、結晶格子内の面や方向を指定するために使用される表記法です。
切片(a,b,c)からミラー指数(h,k,l)を計算するには:
1. 切片の逆数を取ります:(1/a, 1/b, 1/c) 2. 同じ比率を持つ最小の整数セットに変換します 3. 面が軸に平行な場合(切片が無限大)、対応するミラー指数は0になります
- 負の指数は数字の上にバーで示されます。例:(h̄,k,l)
- 表記(hkl)は特定の面を、{hkl}は等価な面の族を表します
- 方向指数は角括弧[hkl]で書かれ、方向の族は<hkl>で示されます
ドキュメンテーション
ミラー指数の理解: 結晶面表記の実践的ガイド
結晶学や材料科学に携わったことがある方なら、結晶面を正確に記述することがいかに重要かをご存知でしょう。ミラー指数は、3つの整数(h,k,l)を使って結晶格子内の任意の面を特定するための体系的な方法を提供します。
このCalculatorは、結晶学的軸に沿った面の切片を標準的なミラー指数表記に変換します。結晶構造を分析したり、X線回折データを解釈したりする際、特定の面を参照する必要がよくあります。各面を幾何学的切片で説明する(これは面倒な作業)代わりに、ミラー指数は簡潔で、普遍的に理解できる表記法を提供します。
この表記法が特に有用なのは、研究者間のコミュニケーションを簡素化する点です。「x軸で2、y軸で3、z軸で6で交差する面」と言う代わりに、単に(321)面と参照できます。この標準化は、1839年にウィリアム・ハロウズ・ミラーがそれを導入して以来、結晶学にとって不可欠なものとなっています。
ミラー指数とは何か?
ミラー指数は、結晶格子内の平行な面の族を一意に識別する3つの整数(h,k,l)です。重要な洞察は、結晶学的軸における面の切片の逆数から導出されることです。
こう考えてみましょう—結晶内の面がx、y、z軸に沿って特定の点で切断される場合、それらの切片値の逆数を取り、最小の整数に還元します。この数学的アプローチは、最初は抽象的に見えますが、実践的な利点があります:構造的に類似した面は類似した指数を持ち、平行な面は位置に関係なく同じ指数を共有します。
ミラー指数の視覚的表現
[SVGコンテンツは同じまま]
ミラー指数の計算方法:基本的な公式
ミラー指数の計算は、4つのステップで行われます:
- 切片の特定 - 面がx、y、z結晶学的軸を横切る点を決定する(a、b、cと呼ぶ)
- 逆数の計算 - 1/a、1/b、1/cを計算する
- 分数の除去 - 分数を排除するために、3つの値すべてに同じ数を掛ける
- 最小項への還元 - 最小の整数を得るために最大公約数で割る
数学的関係は次のように表現されます:
(h,k,l)はミラー指数、a、b、cは各軸に沿った切片です。
よくある混乱の1つは、なぜ逆数を使うのかということです。実は、この選択には実用的な利点があります。軸に平行で交差しない面は無限の切片を持ちますが—1/∞はゼロになり、きれいな数値表現を提供します。この優雅さが、ミラーの記法が約2世紀にわたって使われ続けている理由です。
遭遇する特殊なケース
ミラー指数を扱う際、最初は難しく見える複数のエッジケースがあります:
平行な面 - 面が軸に平行で交差しない場合、その切片は無限大になります。1/∞ = 0なので、対応する指数はゼロになります。例えば、y軸に平行な面は(201)となり、中央のゼロはy軸を決して横切らないことを示します。
負の切片 - 面は原点の負の側で軸と交差することがあります。正式な結晶学的表記では、負の指数は数字の上にバーで示されます:(h̄kl)。デジタルな文脈では、実用性のため(-h,k,l)と書かれることが多いです。
分数の切片 - 初期の切片が分数になることがあります。問題ありません—分母を消去するために、すべての逆数に最小公倍数を掛けるだけです。重要なのは比率であり、絶対値ではありません。
常に簡略化する - よくある間違いは、指数を簡略化しないことです。(622)と(311)は同じ面の族を表しますが、結晶学者は常に(311)—最小の整数セット—を使用します。分数を簡約化するのと同じように考えてください:常に最大公約数で割ります。
このCalculatorの使い方
Calculatorの使用は簡単です:
-
切片を入力 - x、y、zの各軸での平面の交差点を入力
- 正の側の切片には正の数
- 負の側の切片には負の数
- 軸に平行な平面の場合はゼロまたは無限大
-
即座に結果を取得 - Calculatorが自動的にミラー指数を計算
-
可視化を確認 - 3D表現で結晶格子内の平面の向きを表示
-
作業用にコピー - 結果を直接解析ソフトウェアやメモに転送
実践例
具体的なケースを見てみましょう。以下の切片を持つ平面があるとします:
- x軸で2
- y軸で3
- z軸で6
計算手順は以下の通りです:
- 切片から開始:(2, 3, 6)
- 逆数を取る:(1/2, 1/3, 1/6)
- LCM(2,3,6) = 6で乗じて分数を除去:(3, 2, 1)
- 約数可能かチェック:GCD(3,2,1) = 1なので完了
結果:(321)平面
これは完全なプロセスを示す一般的な例です。実際には、主な結晶面を表す(100)や(110)のようなより簡単なケースによく遭遇します。
ミラー指数の実世界応用
ミラー指数は結晶構造が重要な多くの分野で登場します。最も頻繁に遭遇する場所は以下の通りです:
X線回折分析
X線回折(XRD)パターンを分析する際、ミラー指数は不可欠です。各回折ピークは特定の結晶面に対応します。面間隔と回折角の関係はブラッグの法則に従います:
ここで、は(h,k,l)指数を持つ面間隔、はX線波長、は回折角です。
実際のXRD作業では、回折ピークのインデックス付け—観測されたピークを特定の(hkl)面に一致させることがよくあります。この過程は未知の結晶質材料の同定や、合成後の結晶構造の確認に基本的です。
材料工学
表面特性 - 異なる結晶面は異なる原子配列を露出するため、異なる表面エネルギーを持ちます。例えば、FCC金属の(111)面は(100)または(110)面よりも低い表面エネルギーを持ちます。これは触媒において非常に重要で、反応速度は露出している結晶面に依存します。
機械的挙動 - 金属は特定の結晶学的すべり系に沿って変形します。アルミニウムのようなFCC金属では、すべりは{111}面の<110>方向で発生します。変形中にどの面が活性化するかを理解することで、応力下での材料挙動を予測できます。
半導体製造 - シリコンウェハーは特定の結晶学的面に沿って切断され、最も一般的には(100)または(111)面です。この選択は、エピタキシャル成長速度、ドーピング挙動、デバイス性能に影響します。半導体結晶のIEEE標準によれば、(100)方位が現代のCMOS製造を支配しています。
テクスチャ分析 - 金属が圧延、鍛造、または引き抜かれるとき、結晶粒は優先方位(テクスチャ)を発達させます。このテクスチャを記述するには、加工方向と整列する面を指定するミラー指数が必要です。このテクスチャは、電磁鋼の磁気挙動やアルミニウムシートの延性など、直接的に特性に影響します。
鉱物学
地質学者はミラー指数を用いて鉱物の結晶面を記述します。石英結晶を検査するとき、これらの平らな面は特定の(hkl)面に対応します。へき開—鉱物が特定の面に沿って破壊される方法—もこの記法を用いて記述されます。岩塩(食塩)の完全な{100}へき開や、蛍石の{111}へき開は典型的な例です。
代替の指数表記システム
ミラー指数が結晶学を支配していますが、時折別の表記法に出会うことがあります:
ミラー・ブラバイ指数 - 六方晶系の結晶では、4つの指数システム(hkil)を使用し、i=-(h+k)が六方対称性をより良く捉えます。亜鉛、マグネシウム、GaNなどの多くの半導体の研究で見られます。冗長な4番目の指数により、等価な面を認識しやすくなります。これは、六方系の3指数表記では明確でない特徴です。
ウェーバー記号とノイマン表記 - これらは主に古い鉱物学文献に現れます。ほとんどの現代の研究はミラー指数に移行していますが、歴史的な論文を読む際に遭遇する可能性があります。
直接格子ベクトル - 一部の理論的研究では、ミラー指数ではなく直接格子ベクトルを用いて面を記述します。この方法は、原子座標を直接扱う計算材料科学で一般的です。
これらの代替表記にもかかわらず、ミラー指数は7つの結晶系すべてに対応し、ほとんどの応用に直感的な枠組みを提供するため、結晶学の共通言語として残っています。
歴史的発展
ウィリアム・ハロウズ・ミラーは、1839年に「結晶学論」において、この表記法を導入した英国の鉱物学者である。興味深いのは、ミラーが結晶面のインデックス付けのアイデアを発明したわけではなく、ワイス・パラメータなどの既存のシステムがあったことだ。ミラーの画期的な点は、傍截片の逆数を使用したことで、これにより平行面(傍截片が無限大の場合)を優雅に処理し、多くの計算を簡素化した。
このシステムの真の価値は、マックス・フォン・ラウエのX線回折発見(1912年)で明らかになった。ウィリアム・ヘンリー・ブラッグとウィリアム・ローレンス・ブラッグ(父子)は、ミラー指数が回折ピークの原因となる面を完璧に記述することをすぐに認識した。彼らの1913年の結晶構造決定に関する研究により、ミラー指数は不可欠なツールとして定着した。
20世紀を通じて、X線結晶学が鉱物学から冶金学、固体物理学、そして最終的にはタンパク質結晶学へと拡大するにつれ、ミラー指数も共に発展した。今日では、ミラーが想像もしなかった分野—半導体ヘテロ構造の分析からナノ粒子触媒の設計まで—で不可欠なツールとなっている。
実装例
大規模なデータセットを処理したり、分析パイプラインを構築したりする際にミラー指数を計算する必要がある場合、以下は複数の言語での実装例です。各実装は、逆数の計算、分数の簡略化、最小の整数への還元といった主要な課題に対応しています。
Python実装
1import math
2import numpy as np
3
4def calculate_miller_indices(intercepts):
5 """
6 切片からミラー指数を計算する
7
8 引数:
9 intercepts: 3つの切片のリスト [a, b, c]
10
11 戻り値:
12 3つのミラー指数のリスト [h, k, l]
13 """
14 # 無限大の切片(軸に平行)の処理
15 reciprocals = []
16 for intercept in intercepts:
17 if intercept == 0 or math.isinf(intercept):
18 reciprocals.append(0)
19 else:
20 reciprocals.append(1 / intercept)
21
22 # GCD計算のための非ゼロ値の検出
23 non_zero = [r for r in reciprocals if r != 0]
24
25 if not non_zero:
26 return [0, 0, 0]
27
28 # 浮動小数点の問題を避けるための適切な整数へのスケーリング
29 scale = 1000
30 scaled = [round(r * scale) for r in non_zero]
31
32 # GCDの計算
33 gcd_value = np.gcd.reduce(scaled)
34
35 # 最小の整数に変換
36 miller_indices = []
37 for r in reciprocals:
38 if r == 0:
39 miller_indices.append(0)
40 else:
41 miller_indices.append(round((r * scale) / gcd_value))
42
43 return miller_indices
44
45# 使用例
46intercepts = [2, 3, 6]
47indices = calculate_miller_indices(intercepts)
48print(f"切片 {intercepts} のミラー指数: {indices}") # 出力: [3, 2, 1]
49JavaScript実装
1function gcd(a, b) {
2 a = Math.abs(a);
3 b = Math.abs(b);
4
5 while (b !== 0) {
6 const temp = b;
7 b = a % b;
8 a = temp;
9 }
10
11 return a;
12}
13
14function gcdMultiple(numbers) {
15 return numbers.reduce((result, num) => gcd(result, num), numbers[0]);
16}
17
18function calculateMillerIndices(intercepts) {
19 // 無限大の切片の処理
20 const reciprocals = intercepts.map(intercept => {
21 if (intercept === 0 || !isFinite(intercept)) {
22 return 0;
23 }
24 return 1 / intercept;
25 });
26
27 // GCD計算のための非ゼロ値の検出
28 const nonZeroReciprocals = reciprocals.filter(val => val !== 0);
29
30 if (nonZeroReciprocals.length === 0) {
31 return [0, 0, 0];
32 }
33
34 // 浮動小数点の問題を避けるための整数へのスケーリング
35 const scale = 1000;
36 const scaled = nonZeroReciprocals.map(val => Math.round(val * scale));
37
38 // GCDの計算
39 const divisor = gcdMultiple(scaled);
40
41 // 最小の整数への変換
42 const millerIndices = reciprocals.map(val =>
43 val === 0 ? 0 : Math.round((val * scale) / divisor)
44 );
45
46 return millerIndices;
47}
48
49// 例
50const intercepts = [2, 3, 6];
51const indices = calculateMillerIndices(intercepts);
52console.log(`切片 ${intercepts} のミラー指数: (${indices.join(',')})`);
53// 出力: 切片 2,3,6 のミラー指数: (3,2,1)
54Java実装
1import java.util.Arrays;
2
3public class MillerIndicesCalculator {
4
5 public static int gcd(int a, int b) {
6 a = Math.abs(a);
7 b = Math.abs(b);
8
9 while (b != 0) {
10 int temp = b;
11 b = a % b;
12 a = temp;
13 }
14
15 return a;
16 }
17
18 public static int gcdMultiple(int[] numbers) {
19 int result = numbers[0];
20 for (int i = 1; i < numbers.length; i++) {
21 result = gcd(result, numbers[i]);
22 }
23 return result;
24 }
25
26 public static int[] calculateMillerIndices(double[] intercepts) {
27 double[] reciprocals = new double[intercepts.length];
28
29 // 逆数の計算
30 for (int i = 0; i < intercepts.length; i++) {
31 if (intercepts[i] == 0 || Double.isInfinite(intercepts[i])) {
32 reciprocals[i] = 0;
33 } else {
34 reciprocals[i] = 1 / intercepts[i];
35 }
36 }
37
38 // 非ゼロ値のカウント
39 int nonZeroCount = 0;
40 for (double r : reciprocals) {
41 if (r != 0) nonZeroCount++;
42 }
43
44 if (nonZeroCount == 0) {
45 return new int[]{0, 0, 0};
46 }
47
48 // 整数へのスケーリング
49 int scale = 1000;
50 int[] scaled = new int[nonZeroCount];
51 int index = 0;
52
53 for (double r : reciprocals) {
54 if (r != 0) {
55 scaled[index++] = (int) Math.round(r * scale);
56 }
57 }
58
59 // GCDの計算
60 int divisor = gcdMultiple(scaled);
61
62 // 最小の整数への変換
63 int[] millerIndices = new int[reciprocals.length];
64 for (int i = 0; i < reciprocals.length; i++) {
65 if (reciprocals[i] == 0) {
66 millerIndices[i] = 0;
67 } else {
68 millerIndices[i] = (int) Math.round((reciprocals[i] * scale) / divisor);
69 }
70 }
71
72 return millerIndices;
73 }
74
75 public static void main(String[] args) {
76 double[] intercepts = {2, 3, 6};
77 int[] indices = calculateMillerIndices(intercepts);
78
79 System.out.println("切片 " +
80 Arrays.toString(intercepts) + " のミラー指数: " +
81 Arrays.toString(indices));
82 // 出力: 切片 [2.0, 3.0, 6.0] のミラー指数: [3, 2, 1]
83 }
84}
85Excel VBA実装
1' ミラー指数計算用のExcel VBA関数
2Function CalculateMillerIndices(x As Double, y As Double, z As Double) As String
3 Dim recipX As Double, recipY As Double, recipZ As Double
4 Dim nonZeroCount As Integer, i As Integer
5 Dim scale As Long, gcdVal As Long
6 Dim scaledVals() As Long
7 Dim millerH As Long, millerK As Long, millerL As Long
8
9 ' 逆数の計算
10 If x = 0 Then
11 recipX = 0
12 Else
13 recipX = 1 / x
14 End If
15
16 If y = 0 Then
17 recipY = 0
18 Else
19 recipY = 1 / y
20 End If
21
22 If z = 0 Then
23 recipZ = 0
24 Else
25 recipZ = 1 / z
26 End If
27
28 ' 非ゼロ値のカウント
29 nonZeroCount = 0
30 If recipX <> 0 Then nonZeroCount = nonZeroCount + 1
31 If recipY <> 0 Then nonZeroCount = nonZeroCount + 1
32 If recipZ <> 0 Then nonZeroCount = nonZeroCount + 1
33
34 If nonZeroCount = 0 Then
35 CalculateMillerIndices = "(0,0,0)"
36 Exit Function
37 End If
38
39 ' 整数へのスケーリング
40 scale = 1000
41 ReDim scaledVals(1 To nonZeroCount)
42 i = 1
43
44 If recipX <> 0 Then
45 scaledVals(i) = Round(recipX * scale)
46 i = i + 1
47 End If
48
49 If recipY <> 0 Then
50 scaledVals(i) = Round(recipY * scale)
51 i = i + 1
52 End If
53
54 If recipZ <> 0 Then
55 scaledVals(i) = Round(recipZ * scale)
56 End If
57
58 ' GCDの計算
59 gcdVal = scaledVals(1)
60 For i = 2 To nonZeroCount
61 gcdVal = GCD(gcdVal, scaledVals(i))
62 Next i
63
64 ' ミラー指数の計算
65 If recipX = 0 Then
66 millerH = 0
67 Else
68 millerH = Round((recipX * scale) / gcdVal)
69 End If
70
71 If recipY = 0 Then
72 millerK = 0
73 Else
74 millerK = Round((recipY * scale) / gcdVal)
75 End If
76
77 If recipZ = 0 Then
78 millerL = 0
79 Else
80 millerL = Round((recipZ * scale) / gcdVal)
81 End If
82
83 CalculateMillerIndices = "(" & millerH & "," & millerK & "," & millerL & ")"
84End Function
85
86Function GCD(a As Long, b As Long) As Long
87 Dim temp As Long
88
89 a = Abs(a)
90 b = Abs(b)
91
92 Do While b <> 0
93 temp = b
94 b = a Mod b
95 a = temp
96 Loop
97
98 GCD = a
99End Function
100
101' Excelでの使用例:
102' =CalculateMillerIndices(2, 3, 6)
103' 結果: (3,2,1)
104C++実装
1#include <iostream>
2#include <vector>
3#include <cmath>
4#include <numeric>
5#include <algorithm>
6
7// 2つの数の最大公約数を計算
8int gcd(int a, int b) {
9 a = std::abs(a);
10 b = std::abs(b);
11
12 while (b != 0) {
13 int temp = b;
14 b = a % b;
15 a = temp;
16 }
17
18 return a;
19}
20
21// 複数の数の最大公約数を計算
22int gcdMultiple(const std::vector<int>& numbers) {
23 int result = numbers[0];
24 for (size_t i = 1; i < numbers.size(); ++i) {
25 result = gcd(result, numbers[i]);
26 }
27 return result;
28}
29
30// 切片からミラー指数を計算
31std::vector<int> calculateMillerIndices(const std::vector<double>& intercepts) {
32 std::vector<double> reciprocals;
33
34 // 逆数の計算
35 for (double intercept : intercepts) {
36 if (intercept == 0 || std::isinf(intercept)) {
37 reciprocals.push_back(0);
38 } else {
39 reciprocals.push_back(1.0 / intercept);
40 }
41 }
42
43 // 非ゼロ値の検出
44 std::vector<double> nonZeroReciprocals;
45 for (double r : reciprocals) {
46 if (r != 0) {
47 nonZeroReciprocals.push_back(r);
48 }
49 }
50
51 if (nonZeroReciprocals.empty()) {
52 return {0, 0, 0};
53 }
54
55 // 整数へのスケーリング
56 const int scale = 1000;
57 std::vector<int> scaled;
58 for (double r : nonZeroReciprocals) {
59 scaled.push_back(std::round(r * scale));
60 }
61
62 // GCDの計算
63 int divisor = gcdMultiple(scaled);
64
65 // 最小の整数への変換
66 std::vector<int> millerIndices;
67 for (double r : reciprocals) {
68 if (r == 0) {
69 millerIndices.push_back(0);
70 } else {
71 millerIndices.push_back(std::round((r * scale) / divisor));
72 }
73 }
74
75 return millerIndices;
76}
77
78int main() {
79 std::vector<double> intercepts = {2, 3, 6};
80 std::vector<int> indices = calculateMillerIndices(intercepts);
81
82 std::cout << "切片 [";
83 for (size_t i = 0; i < intercepts.size(); ++i) {
84 std::cout << intercepts[i];
85 if (i < intercepts.size() - 1) std::cout << ", ";
86 }
87 std::cout << "] のミラー指数: (";
88
89 for (size_t i = 0; i < indices.size(); ++i) {
90 std::cout << indices[i];
91 if (i < indices.size() - 1) std::cout << ",";
92 }
93 std::cout << ")" << std::endl;
94
95 // 出力: 切片 [2, 3, 6] のミラー指数: (3,2,1)
96
97 return 0;
98}
99練習問題と解答
例題を解くことで計算プロセスを確実に理解できます:
ケース1:標準的な計算
- 切片:(2, 3, 6) → 逆数:(1/2, 1/3, 1/6) → 分数を消去(×6):(3, 2, 1)
- 結果:(321)
ケース2:軸に平行な平面
- 切片:(1, ∞, 2) → 逆数:(1, 0, 1/2) → 分数を消去(×2):(2, 0, 1)
- 結果:(201) - ゼロは y 軸を横切らないことを示しています
ケース3:負の切片
- 切片:(-1, 2, 3) → 逆数:(-1, 1/2, 1/3) → 分数を消去(×6):(-6, 3, 2)
- 結果:(-6,3,2) または結晶学的表記で (6̄32)
ケース4:分数の切片
- 切片:(1/2, 1/3, 1/4) → 逆数:(2, 3, 4) → すでに整数
- 結果:(234) - 切片が分数の場合、逆数は通常きれいな数になります
ケース5:主立方体面
- 切片:(1, ∞, ∞) → 逆数:(1, 0, 0)
- 結果:(100) - 立方晶の6つの主要面の1つ
よくある質問
ミラー指数は何に使用されますか?
ミラー指数は結晶格子の特定の面を識別します。X線回折分析(ピークのインデックス付け)、材料工学(すべり面や劈開の記述)、半導体製造(ウェーハ方位の指定)、鉱物学(結晶面の特徴付け)で常に使用されます。これらの分野全体で結晶学的面を議論するための標準言語となっています。
軸に平行な面をどのように扱いますか?
面が軸に平行で、決して交差しない場合、その切片は無限大となります。1/∞ = 0 であるため、対応するミラー指数はゼロになります。y軸に平行な面は中間の位置にゼロを持ちます:(h,0,l)。これがミラー記法の優雅な特徴の1つで、このエッジケースを自然に処理できます。
負の指数は何を意味しますか?
負の指数は、面が原点の負の側でその軸と交差することを意味します。結晶学者は数字の上にバーを付けて表記します:(h̄kl)。物理的特性の観点から、(321)と(3̄2̄1̄)面は等価です—これらは原点の反対側にある平行面です。この区別は、特定の結晶面を記述したり、方位関係を分析したりする際に主に重要になります。
ミラー指数は結晶構造とどのように関連していますか?
ミラー指数は、結晶格子を横切る平行面のセットを記述します。これらの面の間隔(d間隔)は、指数と結晶の格子パラメータの両方に依存します。指数が高くなるほど、面はより密接に配置されます。X線回折では、特定の(hkl)値を持つ面がX線の鏡として機能し、d間隔がブラッグの法則に従って回折角を決定します。このつながりが、回折パターンのインデックス付け—観測されたピークに(hkl)値を割り当てること—が構造決定の基本である理由です。
ミラー指数とミラー・ブラバイ指数の違いは何ですか?
ミラー指数(hkl)はすべての結晶系で使用できますが、六方晶系は特別な課題を提示します。六方晶系では、結晶学的に等価な面のミラー指数が明らかに似ていません。ミラー・ブラバイ指数(hkil)は、i = -(h+k)となる冗長な4番目の指数を追加します。これにより六方対称性が明示的になり—等価な面は似たような指数を持ちます。これは主に六方金属(Mg、Zn、Ti)やウルツ鉱型半導体(GaN、ZnO)を扱う際に遭遇します。
結晶面間の角度をどのように計算しますか?
立方晶系では、面(h₁k₁l₁)と(h₂k₂l₂)の間の角度θは以下のようになります:
これは本質的に法線ベクトルの内積です。非立方晶系(斜方晶、正方晶など)では、非直交軸や異なる格子パラメータを考慮するために計量テンソルが必要です。ほとんどの結晶学ソフトウェアはこれらの計算を自動的に処理します。
d間隔はミラー指数とどのように関連していますか?
d間隔—隣接する平行面間の垂直距離—は指数が増加するにつれて減少します。格子パラメータaを持つ立方晶系では:
この単純な式が、立方系が教育に便利である理由です。他の結晶系では、この式に追加の格子パラメータ(b、c、および角度α、β、γ)が組み込まれます。国際結晶学会誌は7つの結晶系すべてのための式を提供しています。
ミラー指数は分数になることはありますか?
いいえ、慣例により常に整数です。計算で(3/2, 1, 1/2)のような分数が得られた場合は、分母の最小公倍数をすべてに掛けて(3, 2, 1)とします。整数の要件により、表記が標準化され、誰もが同じ面を同じように記述できます。
ミラー指数を実験的にどのように決定しますか?
大きな単結晶の場合、光学ゴニオメトリーが結晶面間の角度を測定し、それをミラー指数に変換できます。より一般的には、X線または電子回折を使用します。回折パターンは特定の角度で点またはピークを示し、それぞれが格子面のセットに対応します。これらの角度を測定し、ブラッグの法則を適用することで、各反射に(hkl)値を割り当てることができます—これをインデックス付けと呼びます。ソフトウェア付きの最新の回折計は、ほとんどの処理を自動化しますが、根本的な幾何学を理解することは依然として重要です。
最も一般的なミラー指数は何ですか?
立方晶系では、以下の面に頻繁に遭遇します:
- (100)、(010)、(001) - 6つの立方面
- (110)、(101)、(011) - 2つの軸を横切る対角面
- (111) - 3つの軸を等しく横切る八面体面
- (112) - 鉄などのBCC金属の一般的なすべり面
これらの低指数面は最大のd間隔と最低の表面エネルギーを持ち、最も一般的に観察される結晶面と好まれるすべり面となっています。
これは7つの結晶系すべてに適用されますか?
はい。ミラー指数の表記は、立方晶、正方晶、斜方晶、六方晶、三方晶、単斜晶、三斜晶のすべてに適用されます。計算プロセス(切片→逆数→整数)は、結晶系に関係なく同じままです。ただし、六方晶系は明確さのために4指数のミラー・ブラバイ表記をしばしば使用します。
計算の精度はどうですか?
計算機は、浮動小数点の逆数から変換した後、厳密な整数演算を使用するため、結果は数学的に正確です。不確実性の主な源は、通常、切片の決定—特に実験データや結晶構造モデルから測定する場合—にあります。アルゴリズムは、平行面、負の切片、分数の切片など、すべてのエッジケースを処理します。
参考文献
-
Miller, W. H. (1839). 結晶学論. ケンブリッジ: J. & J.J. Deighton社.
-
Ashcroft, N. W., & Mermin, N. D. (1976). 固体物理学. Holt, Rinehart and Winston.
-
Hammond, C. (2015). 結晶学と回折の基礎 (第4版). オックスフォード大学出版局.
-
Cullity, B. D., & Stock, S. R. (2014). X線回折の要素 (第3版). ピアソン・エデュケーション.
-
Kittel, C. (2004). 固体物理学入門 (第8版). ワイリー.
-
Kelly, A., & Knowles, K. M. (2012). 結晶学と結晶欠陥 (第2版). ワイリー.
-
国際結晶学連合. (2016). 結晶学国際テーブル, 第A巻: 空間群対称性. ワイリー.
-
Giacovazzo, C., Monaco, H. L., Artioli, G., Viterbo, D., Ferraris, G., Gilli, G., Zanotti, G., & Catti, M. (2011). 結晶学の基礎 (第3版). オックスフォード大学出版局.
-
Buerger, M. J. (1978). 基礎結晶学: 結晶の基本的な幾何学的特徴への入門. MITプレス.
-
Tilley, R. J. (2006). 結晶と結晶構造. ワイリー.
クイックリファレンス要約
ミラー指数(hkl)は、結晶面の切片の逆数から導出された3つの整数を使用して、結晶面を標準化された方法で識別する方法を提供します。この表記法は、すべての結晶系で機能し、1839年以来、結晶学の標準となっています。
回折パターンのインデックス付け、金属のすべり系の記述、半導体ウェーハの方位の指定、または鉱物の劈開面の識別など、どのような場合でも、ミラー指数は使用するツールです。このCalculatorは、逆数の計算、分数の簡略化、最小公倍数への還元といった算術的な処理を行うので、結晶学的な意味の解釈に集中できます。