米勒指数计算器 - 将晶体平面截距转换为(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>表示
文档
理解Miller指数:晶面符号的实用指南
如果你曾经从事晶体学或材料科学研究,你就会知道准确描述晶面至关重要。Miller指数正是为此而生——使用三个整数(h,k,l)系统性地识别晶格中的任何晶面。
这个计算器将晶体学轴上的平面截距转换为标准Miller指数符号。在分析晶体结构或解释X射线衍射数据时,你经常需要引用特定的晶面。与其通过几何截距描述每个平面(这可能很麻烦),不如使用Miller指数提供一种简洁、被普遍理解的符号。
这种符号特别有用的地方在于它简化了研究人员之间的交流。与其说"这是一个在x轴上截距为2,y轴上截距为3,z轴上截距为6的平面",你只需引用(321)平面。自威廉·哈洛斯·米勒在1839年引入这种符号以来,这种标准化对晶体学至关重要。
什么是米勒指数?
米勒指数是三个整数(h,k,l),它们唯一地标识晶体晶格中的一组平行平面。关键洞察是:它们源自平面与晶体学轴的截距的倒数。
这样思考——如果一个平面在x、y和z轴上的特定点穿过晶体,你取这些截距值的倒数并将其简化为最小的整数。这种数学方法虽然最初看起来很抽象,但有实际优势:结构相似的平面获得相似的指数,平行平面无论其位置如何都共享相同的指数。
米勒指数的可视化表示
[SVG图像保持不变]
如何计算米勒指数:核心公式
计算米勒指数遵循一个直接的四步流程:
- 识别截距 - 确定平面穿过x、y和z晶体学轴的位置(称为a、b和c)
- 取倒数 - 计算1/a、1/b和1/c
- 清除分数 - 将三个值乘以相同的数以消除分数
- 简化到最低项 - 除以最大公约数以获得最小整数
数学关系表示为:
其中(h,k,l)是米勒指数,a、b、c是每个轴上的截距。
一个常见的混淆点:为什么使用倒数?事实证明,这种选择有实际好处。从未与轴相交(平行于轴)的平面将具有无穷大的截距——但1/∞等于零,给我们一个干净的数值表示。这种优雅是为什么米勒符号在近两个世纪内一直存在的原因。
你会遇到的特殊情况
使用米勒指数,你会遇到几个乍看起来很棘手的边缘情况:
平行平面 - 当平面与轴平行(从不相交)时,该截距为无穷大。由于1/∞ = 0,相应的指数变为零。因此,与y轴平行的平面可能是(201),中间的零表示它从未穿过y轴。
负截距 - 平面可以在原点负侧截取轴。在正式的晶体学符号中,负指数用数字上方的横线表示:(h̄kl)。在数字环境中,你通常会看到它写作(-h,k,l)以便实用。
分数截距 - 有时你的初始截距是分数。没问题——只需将所有倒数乘以最小公倍数以清除分母。重要的是比率,而不是绝对值。
始终简化 - 一个常见的错误是保留未简化的指数。(622)和(311)代表相同的平面族,但晶体学家总是使用(311)——最低的整数集。可以把它想象成简化分数:总是除以最大公约数。
如何使用这个计算器
使用计算器非常简单:
-
输入截距 - 输入平面与 x、y 和 z 轴的交点
- 正数表示正侧截距
- 负数表示负侧截距
- 零或无穷大表示与轴平行的平面
-
获取即时结果 - 计算器自动计算Miller指数
-
查看可视化 - 3D 表示显示您的平面在晶格中的方向
-
复制用于工作 - 直接将结果传输到分析软件或笔记
实际示例
让我们通过一个具体案例。假设您有一个平面,其截距为:
- x轴为 2
- y轴为 3
- z轴为 6
计算过程如下:
- 从截距开始:(2, 3, 6)
- 取倒数:(1/2, 1/3, 1/6)
- 通过最小公倍数(2,3,6) = 6 清除分数:(3, 2, 1)
- 检查是否可约:最大公约数(3,2,1) = 1,因此完成
结果:(321) 平面
这是一个常见的示例,因为它展示了完整的过程。在实践中,您通常会遇到更简单的情况,如 (100) 或 (110) 平面,它们代表主要的晶面。
米勒指数的实际应用
米勒指数在多个涉及晶体结构的领域中都有出现。以下是你最常遇到它们的地方:
X射线衍射分析
在分析X射线衍射(XRD)图案时,米勒指数是不可或缺的。每个衍射峰对应特定的晶体平面集。平面间距与衍射角之间的关系遵循布拉格定律:
其中 是具有指数 (h,k,l) 的平面间距, 是X射线波长, 是衍射角。
在实际的XRD工作中,你通常需要对衍射峰进行索引——将观测到的峰匹配到特定的 (hkl) 平面。这个过程对于识别未知晶体材料或确认合成后的晶体结构至关重要。
材料工程
表面性质 - 不同的晶体平面暴露不同的原子排列,这意味着它们具有不同的表面能。例如,面心立方金属的 (111) 面比 (100) 或 (110) 面具有更低的表面能。这在催化中极其重要,反应速率取决于暴露的晶体面。
机械行为 - 金属沿特定的晶体学滑移系统变形。在铝等面心立方金属中,滑移发生在 {111} 平面的 <110> 方向上。了解在变形过程中哪些平面是活跃的,有助于预测材料在受力时的行为。
半导体制造 - 硅晶圆沿特定的晶体学平面切割,最常见的是 (100) 或 (111)。这种选择会影响外延生长速率、掺杂行为和器件性能。根据 IEEE半导体晶体标准,(100) 取向在现代CMOS制造中占主导地位。
织构分析 - 当金属被轧制、锻造或拉伸时,晶粒会发展出优先取向(织构)。描述这种织构需要使用米勒指数来指定哪些平面与加工方向对齐。这种织构直接影响电工钢的磁性行为和铝板的延展性。
矿物学
地质学家使用米勒指数描述矿物晶体面。当你观察石英晶体时,那些平面对应特定的 (hkl) 平面。解理——矿物沿某些平面断裂的方式——也使用这种符号描述。卤化钠(食盐)的 {100} 完美解理或萤石的 {111} 解理是经典的例子。
替代标记系统
虽然米勒指数在晶体学中占主导地位,但你偶尔会遇到其他标记方法:
米勒-布拉瓦斯指数 - 对于六方晶体,使用四指数系统 (hkil),其中 i=-(h+k) 能更好地捕捉六方对称性。你会在锌、镁和许多半导体(如氮化镓)的研究中看到这种表示。冗余的第四个指数使得识别等效平面变得更加容易 - 这在三指数表示法中对于六方系统并不明显。
韦伯符号和诺伊曼标记 - 这些主要出现在较早的矿物学文献中。大多数现代工作已经转向米勒指数,但在阅读历史论文时你可能会遇到这些。
直接晶格矢量 - 一些理论研究使用直接晶格矢量而非米勒指数来描述平面。在直接处理原子坐标的计算材料科学中,这种方法很常见。
尽管存在这些替代方法,米勒指数仍然是晶体学的通用语言,因为它们适用于所有七种晶体系统,并为大多数应用提供了直观的框架。
历史发展
威廉·霍洛斯·米勒,一位英国矿物学家,在1839年的《晶体学论文》中引入了这种符号系统。有趣的是,米勒并非发明了晶面索引的概念——早期像魏斯参数这样的系统就已存在。米勒的突破在于使用截距的倒数,这优雅地处理了平行平面(截距为无穷)并简化了许多计算。
这个系统的真正价值在于马克斯·冯·劳厄于1912年发现X射线衍射时变得清晰。威廉·亨利·布拉格和威廉·劳伦斯·布拉格(父子)立即认识到米勒指数完美地描述了负责衍射峰的平面。他们1913年关于晶体结构测定的工作使米勒指数成为必不可少的工具。
在整个20世纪,随着X射线晶体学从矿物学扩展到冶金学、固体物理学,最终到蛋白质晶体学,米勒指数一直伴随其中。如今,它们在米勒从未想象过的领域中不可或缺——从分析半导体异质结构到设计纳米颗粒催化剂。
实现示例
如果您需要以编程方式计算米勒指数——可能是在处理大型数据集或构建分析管道——以下是几种语言的实现。每种实现都处理关键挑战:取倒数、清除分数并简化到最低项。
Python 实现
1import math
2import numpy as np
3
4def calculate_miller_indices(intercepts):
5 """
6 从截距计算米勒指数
7
8 参数:
9 intercepts: 三个截距的列表 [a, b, c]
10
11 返回:
12 三个米勒指数的列表 [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 # 找出非零值以计算最大公约数
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 # 找出最大公约数
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 // 找出非零值以计算最大公约数
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 // 找出最大公约数
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 // 找出最大公约数
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 ' 找出最大公约数
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// 计算两个数的最大公约数
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 // 找出最大公约数
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) - 立方晶体的六个主要面之一
常见问题
Miller指数用于什么?
Miller指数用于识别晶体晶格中的特定平面。在X射线衍射分析(峰值索引)、材料工程(描述滑移面和解理面)、半导体制造(指定晶片方向)和矿物学(表征晶体面)中,你将不断使用它们。它们是跨这些领域讨论晶体平面的标准语言。
如何处理与轴平行的平面?
当一个平面与轴平行且从未与之相交时,该截距为无穷大。由于1/∞ = 0,对应的Miller指数为零。与y轴平行的平面在中间位置得到一个零:(h,0,l)。这是Miller符号的优雅特性之一——它自然地处理这种边界情况。
负指数意味着什么?
负指数表示平面在原点负侧截取该轴。晶体学家用数字上方的横线表示:(h̄kl)。就物理特性而言,(321)和(3̄2̄1̄)平面是等效的——它们是原点两侧的平行平面。这种区分主要在描述特定晶体面或分析取向关系时很重要。
Miller指数如何与晶体结构相关?
Miller指数描述穿过晶体晶格的平行平面集。这些平面之间的间距(d间距)取决于指数和晶体的晶格参数。较高的指数意味着平面间隔更紧密。在X射线衍射中,特定(hkl)值的平面作为X射线的镜面,d间距根据布拉格定律决定衍射角。这就是为什么对衍射图案进行索引(将(hkl)值分配给观测峰)对结构测定是基础。
Miller指数和Miller-Bravais指数有什么区别?
Miller指数(hkl)适用于所有晶体系统,但六方晶体有特殊挑战。在六方系统中,晶体学等效平面的Miller指数不明显相似。Miller-Bravais指数(hkil)增加了一个冗余的第四个指数,其中i = -(h+k)。这使六方对称性明确——等效平面具有相似的指数。在处理六方金属(Mg、Zn、Ti)或纤锌矿半导体(GaN、ZnO)时,你会遇到这种情况。
如何计算晶体平面之间的角度?
对于立方晶体,平面(h₁k₁l₁)和(h₂k₂l₂)之间的角度θ为:
这本质上是法向量的点积。对于非立方系统(正交、四方等),你需要度量张量,以考虑非垂直轴或不相等的晶格参数。大多数晶体学软件自动处理这些计算。
d间距如何与Miller指数相关?
d间距——相邻平行平面之间的垂直距离——随着指数增加而减小。对于晶格参数为a的立方晶体:
这个简单的公式解释了为什么立方系统适合教学。对于其他晶体系统,公式包含额外的晶格参数(b、c和角度α、β、γ)。晶体学国际表提供了所有七种晶体系统的公式。
Miller指数可以是分数吗?
不,按惯例必须是整数。如果你的计算产生如(3/2, 1, 1/2)的分数,请将所有数乘以分母的最小公倍数,得到(3, 2, 1)。整数要求保持符号标准化——每个人都以相同的方式描述同一平面。
如何通过实验确定Miller指数?
对于大型单晶,光学测角仪测量晶体面之间的角度,可转换为Miller指数。更常见的是使用X射线或电子衍射。衍射图案显示特定角度的斑点或峰,每个对应一组晶格平面。通过测量这些角度并应用布拉格定律,你可以为每个反射分配(hkl)值——这个过程称为索引。现代衍射仪配备的软件自动完成大部分工作,但理解underlying几何学仍然很重要。
最常见的Miller指数是什么?
在立方晶体中,你经常会遇到:
- (100), (010), (001) - 六个立方体面
- (110), (101), (011) - 穿过两个轴的对角平面
- (111) - 八面体平面,均等地穿过所有三个轴
- (112) - BCC金属(如铁)中常见的滑移面
这些低指数平面具有最大的d间距和最低的表面能,因此是最常观察到的晶体面和首选滑移面。
这适用于所有七种晶体系统吗?
是的。Miller指数符号普遍适用于立方、四方、正交、六方、三方、单斜和三斜系统。计算过程(截距→倒数→整数)无论晶体系统如何都保持不变。但是,六方系统通常为了清晰起见使用四指数Miller-Bravais符号。
计算的准确性如何?
计算器在将浮点倒数转换后使用精确整数算术,确保结果在数学上精确。主要的不确定性通常来自确定截距本身——尤其是从实验数据或晶体结构模型测量时。该算法处理所有边界情况:平行平面、负截距和分数截距。
参考文献
-
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版)。Pearson教育出版社。
-
Kittel, C. (2004). 固体物理学导论(第8版)。Wiley出版社。
-
Kelly, A., & Knowles, K. M. (2012). 晶体学和晶体缺陷(第2版)。Wiley出版社。
-
国际晶体学联合会。(2016). 晶体学国际表,A卷:空间群对称性。Wiley出版社。
-
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). 晶体与晶体结构。Wiley出版社。
快速参考摘要
Miller指数(hkl)提供了一种标准化的方法,通过从平面截距的倒数中得出的三个整数来识别晶体平面。这种符号适用于所有晶体系统,自1839年以来一直是晶体学的标准。
无论您是在索引衍射图案、描述金属中的滑移系统、指定半导体晶圆取向,还是识别矿物解理面,Miller指数都是您将使用的工具。这个计算器处理算术运算——取倒数、清除分数并简化到最低项——这样您可以专注于解释晶体学意义。