結晶面識別のためのミラー指数計算機
この使いやすいツールを使用して、結晶面の切片からミラー指数を計算します。結晶学、材料科学、固体物理学のアプリケーションに不可欠です。
ミラー指数計算機
結晶面の切片
結晶面がx、y、z軸と交わる切片を入力してください。軸に平行な面には「0」を使用してください(無限大の切片)。
数値または無限大のために0を入力してください
数値または無限大のために0を入力してください
数値または無限大のために0を入力してください
ミラー指数
この面のミラー指数は次のとおりです:
視覚化
ミラー指数とは?
ミラー指数は、結晶格子内の面や方向を指定するために結晶学で使用される表記法です。
切片(a,b,c)からミラー指数(h,k,l)を計算するには:
1. 切片の逆数を取ります:(1/a, 1/b, 1/c) 2. 同じ比率を持つ最小の整数のセットに変換します 3. 面が軸に平行な場合(切片=無限大)、対応するミラー指数は0です
- 負の指数は、数字の上にバーを付けて示します。例:(h̄,k,l)
- 表記(hkl)は特定の面を表し、{hkl}は同等の面のファミリーを表します
- 方向の指数は角括弧[hkl]で書かれ、方向のファミリーは<hkl>で示されます
ドキュメンテーション
ミラー指数計算機
はじめに
ミラー指数計算機は、結晶学者、材料科学者、学生が結晶面のミラー指数を決定するための強力なツールです。ミラー指数は、結晶学において結晶格子内の面と方向を指定するために使用される表記システムです。この計算機を使用すると、結晶面が座標軸と交差する点を簡単にミラー指数に変換でき、特定の結晶面を識別し、コミュニケーションするための標準化された方法を提供します。
ミラー指数は、結晶構造とその特性を理解するための基本です。ミラー指数(h,k,l)の単純な整数のセットで面を表すことにより、科学者はX線回折パターンを分析し、結晶成長の挙動を予測し、面間隔を計算し、結晶学的方向に依存するさまざまな物理的特性を研究できます。
ミラー指数とは?
ミラー指数は、結晶格子内の平行な面のファミリーを定義する3つの整数(h,k,l)のセットです。これらの指数は、面が結晶学的軸と作る分数の交差点の逆数から導出されます。この表記は、結晶構造内の特定の面を識別するための標準化された方法を提供します。
ミラー指数の視覚的表現
ミラー指数の計算式
結晶面のミラー指数 (h,k,l) を計算するには、次の数学的手順に従います。
- 面がx、y、z結晶学的軸と交差する点を決定し、値をa、b、cとします。
- これらの交差点の逆数を取ります: 1/a, 1/b, 1/c。
- これらの逆数を同じ比率を維持する最小の整数セットに変換します。
- 結果として得られる3つの整数がミラー指数 (h,k,l) です。
数学的には、次のように表現できます。
ここで:
- (h,k,l) はミラー指数
- a, b, c はそれぞれx、y、z軸との交差点です。
特殊なケースと規則
理解するために重要な特殊なケースと規則がいくつかあります。
-
無限交差点: 面が軸に平行な場合、その交差点は無限大と見なされ、対応するミラー指数はゼロになります。
-
負の指数: 面が原点の負の側で軸と交差する場合、対応するミラー指数は負になり、結晶学的表記では数字の上にバーが付けられます(例: (h̄kl))。
-
分数の交差点: 交差点が分数の場合、最小公倍数を掛けることで整数に変換されます。
-
簡略化: ミラー指数は常に同じ比率を維持する最小の整数セットに減らされます。
計算機の使用方法ガイド
私たちのミラー指数計算機は、任意の結晶面のミラー指数を決定するための簡単な方法を提供します。使用方法は次のとおりです。
-
交差点を入力: 面がx、y、z軸と交差する値を入力します。
- 原点の正の側での交差点には正の数を使用します。
- 負の側での交差点には負の数を使用します。
- 軸に平行な面には「0」を入力します(無限交差)。
-
結果を表示: 計算機は自動的に指定された面のミラー指数 (h,k,l) を計算して表示します。
-
面を視覚化: 計算機には、結晶格子内の面の方向を理解するのに役立つ3D視覚化が含まれています。
-
結果をコピー: 「クリップボードにコピー」ボタンを使用して、計算されたミラー指数を他のアプリケーションに簡単に転送できます。
計算の例
例を通じて説明しましょう。
面がx、y、z軸でそれぞれ2、3、6の点で交差する場合。
- 交差点は (2, 3, 6) です。
- 逆数を取ります: (1/2, 1/3, 1/6)。
- 最小公倍数(2、3、6の最小公倍数は6)を掛けて、最小の整数セットを見つけます: (1/2 × 6, 1/3 × 6, 1/6 × 6) = (3, 2, 1)。
- したがって、ミラー指数は (3,2,1) です。
ミラー指数の使用例
ミラー指数は、さまざまな科学および工学分野で多数のアプリケーションがあります。
結晶学とX線回折
ミラー指数は、X線回折パターンを解釈するために不可欠です。特定のミラー指数を持つ結晶面間の間隔は、X線が回折される角度を決定し、ブラッグの法則に従います。
ここで:
- は整数
- はX線の波長
- はミラー指数 (h,k,l) を持つ面間の間隔
- は入射角です。
材料科学と工学
-
表面エネルギー分析: 異なる結晶面は異なる表面エネルギーを持ち、結晶成長、触媒作用、接着に影響を与えます。
-
機械的特性: 結晶面の方向は、すべり系、割れ面、破壊挙動などの機械的特性に影響を与えます。
-
半導体製造: 半導体製造では、特定の結晶面がエピタキシャル成長やデバイス製造のために選択されます。
-
テクスチャー分析: ミラー指数は、多結晶材料の好ましい方向(テクスチャー)を特定するのに役立ちます。
鉱物学と地質学
地質学者は、ミラー指数を使用して鉱物内の結晶面や割れ面を記述し、同定や形成条件の理解を助けます。
教育アプリケーション
ミラー指数は、材料科学、結晶学、固体物理学のコースで教えられる基本的な概念であり、この計算機は貴重な教育ツールです。
ミラー指数の代替手段
ミラー指数は、結晶面の表記に最も広く使用されているものですが、いくつかの代替システムも存在します。
-
ミラー・ブラヴァイス指数: 六方晶系のための4つの指数 (h,k,i,l) を使用し、ここで i = -(h+k) です。この表記は、六方晶構造の対称性をよりよく反映します。
-
ウェーバー記号: 主に古い文献で使用され、特に立方結晶の方向を記述します。
-
直接格子ベクトル: 一部のケースでは、面はミラー指数ではなく直接格子ベクトルを使用して記述されます。
-
ワイコフ位置: 結晶構造内の原子位置を記述するために使用され、面ではありません。
これらの代替手段にもかかわらず、ミラー指数はその単純さとすべての結晶系に対する普遍的な適用性により、標準的な表記として残っています。
ミラー指数の歴史
ミラー指数システムは、1839年にイギリスの鉱物学者で結晶学者のウィリアム・ハロウェス・ミラーによって開発され、彼の著書「結晶学の教科書」に掲載されました。ミラーの表記は、オーギュスト・ブラヴァイスや他の研究者の以前の研究に基づいていますが、交差点の逆数を使用することで、結晶学的計算を多く簡素化し、平行面のより直感的な表現を提供しました。
ミラーのシステムが採用されたのは、1912年にマックス・フォン・ラウエがX線回折を発見し、ウィリアム・ローレンス・ブラッグとウィリアム・ヘンリー・ブラッグのその後の研究によって、ミラー指数が回折パターンの解釈や結晶構造の決定において実用的な有用性を示したからです。
20世紀を通じて、結晶学が材料科学、固体物理学、生化学においてますます重要になるにつれて、ミラー指数は標準的な表記として確立されました。今日、ミラー指数は現代の材料特性評価技術、計算結晶学、ナノ材料設計において不可欠なものとなっています。
ミラー指数計算のためのコード例
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]
49
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)
54
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("交差点 " + Arrays.toString(intercepts) + " のミラー指数: " +
80 Arrays.toString(indices));
81 // 出力: 交差点 [2.0, 3.0, 6.0] のミラー指数: [3, 2, 1]
82 }
83}
84
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)
104
1#include <iostream>
2#include <vector>
3#include <cmath>
4#include <numeric>
5#include <algorithm>
6
7// 2つの数のGCDを計算する
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// 複数の数のGCDを計算する
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)
- ミラー指数: (3,2,1)
-
例 2: 軸に平行な面
- 交差点: (1, ∞, 2)
- 逆数: (1, 0, 1/2)
- 2を掛ける: (2, 0, 1)
- ミラー指数: (2,0,1)
-
例 3: 負の交差点
- 交差点: (-1, 2, 3)
- 逆数: (-1, 1/2, 1/3)
- 6を掛ける: (-6, 3, 2)
- ミラー指数: (-6,3,2)
-
例 4: 分数の交差点
- 交差点: (1/2, 1/3, 1/4)
- 逆数: (2, 3, 4)
- すでに整数形式
- ミラー指数: (2,3,4)
-
例 5: 特殊面 (100)
- 交差点: (1, ∞, ∞)
- 逆数: (1, 0, 0)
- ミラー指数: (1,0,0)
よくある質問
ミラー指数は何に使われますか?
ミラー指数は、結晶格子内の面と方向を識別し、記述するために使用されます。これは、結晶学者、材料科学者、エンジニアが特定の結晶方向についてコミュニケーションするのを助ける標準化された表記を提供します。ミラー指数は、X線回折パターンを分析し、結晶成長を理解し、面間隔を計算し、結晶学的方向に依存するさまざまな物理的特性を研究するために不可欠です。
軸に平行な面をどのように扱いますか?
面が軸に平行な場合、その面はその軸と交差せず、交差点は無限大と見なされます。ミラー指数表記では、無限大の逆数はゼロとなるため、対応するミラー指数はゼロになります。たとえば、y軸に平行な面は交差点 (a, ∞, c) を持ち、ミラー指数は (h,0,l) になります。
負のミラー指数は何を意味しますか?
負のミラー指数は、面が原点の負の側で対応する軸と交差することを示します。結晶学的表記では、負の指数は通常、数字の上にバーを付けて示されます(例: (h̄kl))。負の指数は、物理的特性に関してはその正の対応物と同等ですが、方向が異なる面を表します。
ミラー指数は結晶構造とどのように関連していますか?
ミラー指数は、結晶構造内の原子の配置に直接関連しています。特定のミラー指数を持つ面の間隔 (dhkl) は、結晶系および格子パラメータに依存します。X線回折において、これらの面はブラッグの法則に従って反射面として機能し、結晶構造を明らかにする特有の回折パターンを生成します。
ミラー指数とミラー・ブラヴァイス指数の違いは何ですか?
ミラー指数は3つの整数 (h,k,l) を使用し、ほとんどの結晶系に適しています。ミラー・ブラヴァイス指数は4つの整数 (h,k,i,l) を使用し、特に六方晶系のために設計されています。第4の指数であるiは冗長(i = -(h+k))ですが、六方晶系の対称性を維持し、同等の面をより認識しやすくします。
2つの結晶面の間の角度をどのように計算しますか?
ミラー指数 (h₁,k₁,l₁) と (h₂,k₂,l₂) を持つ2つの面の間の角度 θ は、立方結晶系において次のように計算できます。
非立方系の場合、計算はより複雑で、結晶系のメトリックテンソルが関与します。
ミラー指数の計算は分数になりますか?
いいえ、慣例として、ミラー指数は常に整数です。計算が最初に分数を生成する場合、同じ比率を維持する最小の整数セットに変換されます。これは、分母の最小公倍数を掛けることによって行われます。
実験的に結晶面のミラー指数をどのように決定しますか?
ミラー指数は、X線回折、電子回折、光学的ゴニオメトリーを使用して実験的に決定できます。X線回折では、回折が発生する角度は、ブラッグの法則に従って結晶面のd間隔に関連しており、対応するミラー指数を特定するのに使用できます。
一般的な結晶面のミラー指数は何ですか?
一般的な結晶面とそのミラー指数には以下が含まれます。
- (100), (010), (001): 立方体の主要な面
- (110), (101), (011): 立方体系の対角面
- (111): 立方体系の八面体面
- (112): 体心立方金属の一般的なすべり面
参考文献
-
Miller, W. H. (1839). A Treatise on Crystallography. Cambridge: For J. & J.J. Deighton.
-
Ashcroft, N. W., & Mermin, N. D. (1976). Solid State Physics. Holt, Rinehart and Winston.
-
Hammond, C. (2015). The Basics of Crystallography and Diffraction (4th ed.). Oxford University Press.
-
Cullity, B. D., & Stock, S. R. (2014). Elements of X-ray Diffraction (3rd ed.). Pearson Education.
-
Kittel, C. (2004). Introduction to Solid State Physics (8th ed.). Wiley.
-
Kelly, A., & Knowles, K. M. (2012). Crystallography and Crystal Defects (2nd ed.). Wiley.
-
International Union of Crystallography. (2016). International Tables for Crystallography, Volume A: Space-group symmetry. Wiley.
-
Giacovazzo, C., Monaco, H. L., Artioli, G., Viterbo, D., Ferraris, G., Gilli, G., Zanotti, G., & Catti, M. (2011). Fundamentals of Crystallography (3rd ed.). Oxford University Press.
-
Buerger, M. J. (1978). Elementary Crystallography: An Introduction to the Fundamental Geometrical Features of Crystals. MIT Press.
-
Tilley, R. J. (2006). Crystals and Crystal Structures. Wiley.
今すぐ私たちのミラー指数計算機を試して、任意の結晶面のミラー指数を迅速かつ正確に決定してください。結晶学を学ぶ学生、材料構造を分析する研究者、新しい材料を設計するエンジニアなど、すべての方に役立つツールです。