Millera indeksu kalkulators - Pārvērst kristāla plaknes pārskaņas (hkl)
Aprēķiniet Millera indeksus (hkl) no kristāla plaknes pārskaņām. Ātrais, precīzais pārveidotājs kristalogrāfijai, XRD analīzei un materiālzinātnei. Darbojas visās kristālu sistēmās.
Millera indeksu kalkulators
Kristāla plaknes krustpunkti
Ievadiet kristāla plaknes krustpunktus ar x, y un z asīm. Izmantojiet '∞' vai 'bezgalība' plaknēm, kas ir paralēlas asij.
Ievadiet skaitli vai ∞ bezgalībai (paralēli asij)
Ievadiet skaitli vai ∞ bezgalībai (paralēli asij)
Ievadiet skaitli vai ∞ bezgalībai (paralēli asij)
Vizualizācija
Kas ir Millera indeksi?
Millera indeksi ir apzīmēšanas sistēma, ko izmanto kristalogrāfijā, lai norādītu plaknes un virzienus kristāla režģos.
Lai aprēķinātu Millera indeksus (h,k,l) no krustpunktiem (a,b,c):
1. Ņemiet krustpunktu apgrieztos lielumus: (1/a, 1/b, 1/c) 2. Pārveidojiet par mazāko veselo skaitļu kopu ar vienādu attiecību 3. Ja plakne ir paralēla asij (krustpunkts = bezgalība), tās atbilstošais Millera indekss ir 0
- Negatīvi indeksi tiek norādīti ar svītru virs skaitļa, piem., (h̄,k,l)
- Apzīmējums (hkl) attēlo specifisku plakni, bet {hkl} attēlo līdzvērtīgu plakņu grupu
- Virziena indeksi tiek rakstīti kvadrātiekavās [hkl], un virzienu grupas tiek apzīmētas ar <hkl>
Dokumentācija
Izpratne par Millera indeksiem: Praktisks ceļvedis kristāla plakņu apzīmēšanai
Ja jūs kādreiz esat strādājis ar kristalogrāfiju vai materiālzinātni, jūs zināt, ka kristāla plakņu precīza aprakstīšana ir izšķiroša. Millera indeksi nodrošina tieši to — sistemātisku veidu, kā identificēt jebkuru plakni kristāla režģī, izmantojot tikai trīs veselos skaitļus (h,k,l).
Šis kalkulators pārveido plakņu krustpunktus gar kristalogrāfiskajām asīm standarta Millera indeksu pierakstā. Analizējot kristālu struktūras vai interpretējot rentgenstaru difrakcijas datus, jums bieži būs nepieciešams atsaukties uz specifiskām plaknēm. Tā vietā, lai aprakstītu katru plakni ar tās ģeometriskajiem krustpunktiem (kas var būt sarežģīti), Millera indeksi sniedz koncīzu, vispārēji saprotamu apzīmējumu.
Šī pieraksta īpaši noderīgā īpašība ir tā, ka tas atvieglo komunikāciju starp pētniekiem. Tā vietā, lai teiktu "plakne, kas krusto x-asi 2, y-asi 3 un z-asi 6", jūs vienkārši atsaucaties uz (321) plakni. Šī standartizācija ir bijusi būtiska kristalogrāfijā kopš Viljama Halousa Millera ieviešanas 1839. gadā.
Kas ir Millera indeksi?
Millera indeksi ir trīs veseli skaitļi (h,k,l), kas unikāli identificē paralēlu plakņu ģimeni kristāla režģī. Šeit ir galvenā atziņa: tie tiek iegūti no reciprokāliem, kur plakne šķērso kristalogrāfiskās ass.
Domājiet par to šādi — ja plakne šķērso kristālu noteiktos punktos gar x, y un z asīm, jūs ņemat šo šķērsošanas punktu reciprokālus un samazināt tos līdz mazākajiem veseliem skaitļiem. Šī matemātiskā pieeja, lai gan sākotnēji šķiet abstrakta, sniedz praktisku priekšrocību: plaknes, kas ir strukturāli līdzīgas, iegūst līdzīgus indeksus, un paralēlas plaknes kopīgo vienādus indeksus neatkarīgi no to pozīcijas.
Millera indeksu vizuāla reprezentācija
[SVG grafiks paliek nemainīgs]
Kā aprēķināt Millera indeksus: Pamatformula
Millera indeksu aprēķināšana seko vienkāršai četru soļu procedūrai:
- Identificēt šķērsošanas punktus - Noteikt, kur plakne šķērso x, y un z kristalogrāfiskās ass (sauciet tos a, b un c)
- Ņemt reciprokālus - Aprēķināt 1/a, 1/b un 1/c
- Attīrīt daļskaitļus - Reizināt visas trīs vērtības ar vienu un to pašu skaitli, lai likvidētu daļskaitļus
- Samazināt līdz zemākajiem terminiem - Dalīt ar lielāko kopīgo dalītāju, lai iegūtu mazākos veselus skaitļus
Matemātiskā attiecība tiek izteikta kā:
Kur (h,k,l) ir Millera indeksi un a, b, c ir šķērsošanas punkti gar katru asi.
Īpašie gadījumi, ar kuriem jūs saskarsieties
Strādājot ar Millera indeksiem, jūs sastapsieties ar vairākām īpašām situācijām, kas sākotnēji šķiet sarežģītas:
Paralēlas plaknes - Kad plakne iet paralēli asij (nekad to nepārkāpjot), šī šķērsošana ir bezgalīga. Tā kā 1/∞ = 0, atbilstošais indekss kļūst nulle. Tā plakne, kas iet paralēli y asij, varētu būt (201), kur vidējais nulle norāda, ka tā nekad nekrusto y asi.
Negatīvas šķērsošanas - Plaknes var šķērsot ass negatīvajā pusē no sākumpunkta. Formālā kristalogrāfiskā pierakstā negatīvie indeksi tiek parādīti ar svītru virs skaitļa: (h̄kl). Digitālās vidēs jūs bieži redzēsiet to uzrakstītu kā (-h,k,l) praktiskuma labad.
Daļveida šķērsošanas - Reizēm jūsu sākotnējās šķērsošanas ir daļskaitļi. Nav problēmas — vienkārši reiziniet visus reciprokālus ar mazāko kopīgo reizinātāju, lai likvidētu saucējus. Svarīga ir attiecība, nevis absolūtās vērtības.
Vienmēr vienkāršot - Bieža kļūda ir atstāt indeksus nereducētā formā. (622) un (311) pārstāv vienu un to pašu plakņu ģimeni, bet kristalogrāfi vienmēr izmanto (311) — zemāko veselo skaitļu kopu. Domājiet par to kā par daļskaitļu samazināšanu: vienmēr daliet ar lielāko kopīgo dalītāju.
Kā lietot šo kalkulatoru
Kalkulatora lietošana ir vienkārša:
-
Ievadiet savus krustpunktus - Ievadiet, kur plakne šķērso x, y un z asis
- Pozitīvi skaitļi pozitīvajai pusei
- Negatīvi skaitļi negatīvajai pusei
- Nulle vai bezgalība plaknēm, kas paralēlas asij
-
Saņemiet momentānus rezultātus - Kalkulators automātiski aprēķina Millera indeksus
-
Pārbaudiet vizualizāciju - 3D attēlojums parāda jūsu plaknes orientāciju kristāla režģī
-
Kopējiet savam darbam - Pārsūtiet rezultātus tieši savā analīzes programmā vai piezīmēs
Praktisks piemērs
Apskatīsim konkrētu gadījumu. Pieņemsim, ka jums ir plakne, kas šķērso:
- x-asi 2
- y-asi 3
- z-asi 6
Šeit ir aprēķins:
- Sākat ar krustpunktiem: (2, 3, 6)
- Ņemiet apgrieztās vērtības: (1/2, 1/3, 1/6)
- Nodzēsiet daļas, reizinot ar LCM(2,3,6) = 6: (3, 2, 1)
- Pārbaudiet, vai ir reducējams: GCD(3,2,1) = 1, tātad esam gatavi
Rezultāts: (321) plakne
Šis ir tipisks piemērs, jo parāda pilnu procesu. Praksē jūs bieži sastapsieties ar vienkāršākiem gadījumiem kā (100) vai (110) plaknes, kas pārstāv galvenās kristāla virsmas.
Millera indeksu reālās pasaules pielietojumi
Millera indeksi parādās vairākās jomās, kur svarīga kristāla struktūra. Šeit ir vietas, kur jūs tos visbiežāk sastapsiet:
Rentgenstaru difrakcijas analīze
Kad jūs analizējat rentgenstaru difrakcijas (XRD) spektrus, Millera indeksi ir neaizstājami. Katrs difrakcijas maksimums atbilst specifiskam kristāla plakņu kopumam. Attiecība starp plakņu attālumu un difrakcijas leņķiem seko Braga likumam:
Kur ir attālums starp plaknēm ar indeksiem (h,k,l), ir rentgenstaru viļņa garums, un ir difrakcijas leņķis.
Praktiskā XRD darbā jums bieži būs jāindeksē difrakcijas maksimumi - saskaņojot novērotos maksimus ar specifiskām (hkl) plaknēm. Šis process ir fundamentāls nezināmu kristālisko materiālu identificēšanai vai kristāla struktūras apstiprināšanai pēc sintēzes.
Materiālu inženierija
Virsmas īpašības - Dažādas kristāla plaknes atklāj atšķirīgus atomu izkārtojumus, kas nozīmē, ka tām ir atšķirīgas virsmas enerģijas. Piemēram, FCC metāla (111) virsma ir ar zemāku virsmas enerģiju nekā (100) vai (110) virsmas. Tas ir ārkārtīgi svarīgi katalīzē, kur reakcijas ātrums ir atkarīgs no tā, kādas kristāla virsmas ir atklātas.
Mehāniskā uzvedība - Metāli deformējas gar specifiskām kristalogrāfiskām slīdes sistēmām. FCC metālos, piemēram, alumīnijā, slīde notiek {111} plaknēs <110> virzienos. Izprotot, kuras plaknes ir aktīvas deformācijas laikā, palīdz paredzēt materiāla uzvedību zem spiediena.
Pusvadītāju ražošana - Silīcija plātnes tiek grieztas gar specifiskām kristalogrāfiskām plaknēm, visbiežāk (100) vai (111). Izvēle ietekmē epitaksiālo augšanas ātrumu, dopēšanas uzvedību un ierīces veiktspēju. Saskaņā ar IEEE standartiem pusvadītāju kristāliem, (100) orientācija dominē mūsdienu CMOS ražošanā.
Tekstūras analīze - Kad metāli tiek velmēti, kalti vai vilkti, graudi attīsta preferenciālas orientācijas (tekstūra). Šīs tekstūras aprakstīšanai nepieciešami Millera indeksi, lai norādītu, kuras plaknes sakārtojas apstrādes virzienos. Šī tekstūra tieši ietekmē īpašības, piemēram, magnētisko uzvedību elektriskajā tēraudē un plastiskumu alumīnija loksnē.
Mineraloģija
Ģeologi apraksta minerālu kristāla virsmas, izmantojot Millera indeksus. Kad jūs apskatāt kvarča kristālu, tās līdzenas virsmas atbilst specifiskām (hkl) plaknēm. Šķelšanās - kā minerāli sadalās gar noteiktām plaknēm - arī tiek aprakstīta, izmantojot šo apzīmējumu. Perfektā {100} šķelšanās halītam (galda sāls) vai {111} šķelšanās fluorītam ir klasiski piemēri.
Alternatīvas indeksācijas sistēmas
Lai gan Millera indeksi dominē kristalogrāfijā, reizēm jūs sastapsiet alternatīvas notācijas:
Millera-Bravē indeksi - Heksagonālām kristālām, četru indeksu sistēma (hkil), kur i=-(h+k) labāk atspoguļo heksagonālo simetriju. Jūs to redzēsiet darbos par cinku, magniju un daudziem pusvadītājiem, piemēram, GaN. Liekais ceturtais indekss atvieglo ekvivalentu plakņu atpazīšanu - kas nav acīmredzams trīs indeksu notācijā heksagonālām sistēmām.
Vēbera simboli un Naumana notācija - Šīs parādās galvenokārt vecākā mineraloģijas literatūrā. Lielākā daļa mūsdienu darbu ir pārgājuši uz Millera indeksiem, bet jūs varētu sastapties ar tiem, lasot vēsturiskus rakstus.
Tiešie režģa vektori - Dažos teorētiskos darbos plaknes tiek aprakstītas, izmantojot tiešos režģa vektorus, nevis Millera indeksus. Šī pieeja ir izplatīta skaitliskajās materiālu zinātnēs, kur jūs strādājat tieši ar atomu koordinātām.
Neskatoties uz šīm alternatīvām, Millera indeksi joprojām paliek kristalogrāfijas pamatvaloda, jo tie darbojas visās septiņās kristālu sistēmās un nodrošina intuitīvu ietvaru lielākajai daļai pielietojumu.
Vēsturiskā attīstība
Viljams Haloūss Millers, britu minerālogs, ieviesa šo apzīmēšanas sistēmu 1839. gadā savā "Traktātā par kristalogrāfiju". Interesanti, ka Millers neizgudroja ideju par kristāla virsmu indeksāciju — jau agrāk pastāvēja sistēmas kā Veisa parametri. Millera pārrāvums bija izmantot starpceļu reciprokus, kas eleganti risināja paralēlas plaknes (kur starpceļi ir bezgalīgi) un vienkāršoja daudzus aprēķinus.
Sistēmas īstā vērtība kļuva skaidra ar Maksa fon Lauē X-staru difrakcijas atklāšanu 1912. gadā. Viljams Henrijs Brags un Viljams Lorens Brags (tēvs un dēls) uzreiz atpazina, kā Millera indeksi precīzi apraksta plaknes, kas atbildīgas par difrakcijas virsotnēm. Viņu 1913. gada darbs par kristāla struktūras noteikšanu nostiprināja Millera indeksus kā būtiskus rīkus.
Visā 20. gadsimtā, X-staru kristalogrāfijai paplašinoties no mineraloģijas uz metalurģiju, cietvielu fiziku un vēlāk proteīnu kristalogrāfiju, Millera indeksi turpināja pastāvēt. Šodien tie ir neaizstājami jomās, kādas Millers pat neiedomājās — sākot no pusvadītāju heterostruktūru analīzes līdz nanodaļiņu katalizatoru projektēšanai.
Ieviešanas piemēri
Ja jums ir nepieciešams programmatiski aprēķināt Millera indeksus — iespējams, jūs apstrādājat lielas datu kopas vai veidojat analīzes konveijeru — šeit ir ieviešanas vairākās valodās. Katra risina galvenās problēmas: reciprokālo vērtību ņemšanu, daļu attīrīšanu un samazināšanu līdz zemākajiem terminiem.
Python ieviešana
1import math
2import numpy as np
3
4def calculate_miller_indices(intercepts):
5 """
6 Aprēķināt Millera indeksus no šķērsojumiem
7
8 Argumenti:
9 intercepts: Trīs šķērsojumu saraksts [a, b, c]
10
11 Atgriež:
12 Trīs Millera indeksu saraksts [h, k, l]
13 """
14 # Apstrādāt bezgalības šķērsojumus (paralēli asij)
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 # Atrast nenulles vērtības GCD aprēķinam
23 non_zero = [r for r in reciprocals if r != 0]
24
25 if not non_zero:
26 return [0, 0, 0]
27
28 # Mērogot līdz saprātīgiem veseliem skaitļiem (izvairīties no peldošā punkta problēmām)
29 scale = 1000
30 scaled = [round(r * scale) for r in non_zero]
31
32 # Atrast GCD
33 gcd_value = np.gcd.reduce(scaled)
34
35 # Konvertēt atpakaļ uz mazākajiem veseliem skaitļiem
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# Lietošanas piemērs
46intercepts = [2, 3, 6]
47indices = calculate_miller_indices(intercepts)
48print(f"Millera indeksi šķērsojumiem {intercepts}: {indices}") # Izvade: [3, 2, 1]
49JavaScript ieviešana
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 // Apstrādāt bezgalības šķērsojumus
20 const reciprocals = intercepts.map(intercept => {
21 if (intercept === 0 || !isFinite(intercept)) {
22 return 0;
23 }
24 return 1 / intercept;
25 });
26
27 // Atrast nenulles vērtības GCD aprēķinam
28 const nonZeroReciprocals = reciprocals.filter(val => val !== 0);
29
30 if (nonZeroReciprocals.length === 0) {
31 return [0, 0, 0];
32 }
33
34 // Mērogot līdz veseliem skaitļiem, lai izvairītos no peldošā punkta problēmām
35 const scale = 1000;
36 const scaled = nonZeroReciprocals.map(val => Math.round(val * scale));
37
38 // Atrast GCD
39 const divisor = gcdMultiple(scaled);
40
41 // Konvertēt uz mazākajiem veseliem skaitļiem
42 const millerIndices = reciprocals.map(val =>
43 val === 0 ? 0 : Math.round((val * scale) / divisor)
44 );
45
46 return millerIndices;
47}
48
49// Piemērs
50const intercepts = [2, 3, 6];
51const indices = calculateMillerIndices(intercepts);
52console.log(`Millera indeksi šķērsojumiem ${intercepts}: (${indices.join(',')})`);
53// Izvade: Millera indeksi šķērsojumiem 2,3,6: (3,2,1)
54Java ieviešana
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 // Aprēķināt reciprokālās vērtības
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 // Skaitīt nenulles vērtības
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 // Mērogot līdz veseliem skaitļiem
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 // Atrast GCD
60 int divisor = gcdMultiple(scaled);
61
62 // Konvertēt uz mazākajiem veseliem skaitļiem
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("Millera indeksi šķērsojumiem " +
80 Arrays.toString(intercepts) + ": " +
81 Arrays.toString(indices));
82 // Izvade: Millera indeksi šķērsojumiem [2.0, 3.0, 6.0]: [3, 2, 1]
83 }
84}
85Excel VBA ieviešana
1' Excel VBA funkcija Millera indeksu aprēķināšanai
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 ' Aprēķināt reciprokālās vērtības
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 ' Skaitīt nenulles vērtības
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 ' Mērogot līdz veseliem skaitļiem
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 ' Atrast GCD
59 gcdVal = scaledVals(1)
60 For i = 2 To nonZeroCount
61 gcdVal = GCD(gcdVal, scaledVals(i))
62 Next i
63
64 ' Aprēķināt Millera indeksus
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' Lietošana Excel:
102' =CalculateMillerIndices(2, 3, 6)
103' Rezultāts: (3,2,1)
104C++ ieviešana
1#include <iostream>
2#include <vector>
3#include <cmath>
4#include <numeric>
5#include <algorithm>
6
7// Aprēķināt divu skaitļu 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// Aprēķināt vairāku skaitļu 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// Aprēķināt Millera indeksus no šķērsojumiem
31std::vector<int> calculateMillerIndices(const std::vector<double>& intercepts) {
32 std::vector<double> reciprocals;
33
34 // Aprēķināt reciprokālās vērtības
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 // Atrast nenulles vērtības
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 // Mērogot līdz veseliem skaitļiem
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 // Atrast GCD
63 int divisor = gcdMultiple(scaled);
64
65 // Konvertēt uz mazākajiem veseliem skaitļiem
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 << "Millera indeksi šķērsojumiem [";
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 // Izvade: Millera indeksi šķērsojumiem [2, 3, 6]: (3,2,1)
96
97 return 0;
98}
99Praktiskie uzdevumi un risinājumi
Darbojoties caur piemēriem, palīdz nostiprināt aprēķinu procesu:
1. gadījums: Standarta aprēķins
- Krustpunkti: (2, 3, 6) → Reciprokie: (1/2, 1/3, 1/6) → Attīrīt daļskaitļus (×6): (3, 2, 1)
- Rezultāts: (321)
2. gadījums: Plakne paralēla asij
- Krustpunkti: (1, ∞, 2) → Reciprokie: (1, 0, 1/2) → Attīrīt daļskaitļus (×2): (2, 0, 1)
- Rezultāts: (201) - Tas nulles rādītājs norāda, ka plakne nekad nekrusto y asi
3. gadījums: Negatīvs krustpunkts
- Krustpunkti: (-1, 2, 3) → Reciprokie: (-1, 1/2, 1/3) → Attīrīt daļskaitļus (×6): (-6, 3, 2)
- Rezultāts: (-6,3,2) vai kristalogrāfiski rakstīts kā (6̄32)
4. gadījums: Daļveida krustpunkti
- Krustpunkti: (1/2, 1/3, 1/4) → Reciprokie: (2, 3, 4) → Jau veseli skaitļi
- Rezultāts: (234) - Kad krustpunkti ir daļskaitļi, reciprokie bieži ir tīri
5. gadījums: Galvenā kubiskā virsma
- Krustpunkti: (1, ∞, ∞) → Reciprokie: (1, 0, 0)
- Rezultāts: (100) - Viena no sešām primārajām kubiskā kristāla virsmām
Bieži uzdotie jautājumi
Kam izmanto Millera indeksus?
Millera indeksi identificē specifiskas plaknes kristālu režģos. Jūs tos izmantosiet pastāvīgi rentgenstaru difrakcijas analīzē (indeksējot maksimumu), materiālu inženierijā (aprakstot slīdes plaknes un šķelšanos), pusvadītāju ražošanā (norādot plātņu orientācijas) un mineraloģijā (raksturojot kristālu virsmas). Tie ir standarta valoda kristalogrāfisko plakņu apspriešanai visās šajās jomās.
Kā rīkoties ar plaknēm, kas paralēlas asij?
Kad plakne iet paralēli asij un nekad to nekrusto, šis šķērsojums ir bezgalīgs. Tā kā 1/∞ = 0, atbilstošais Millera indekss ir nulle. Plakne, kas paralēla y asij, iegūst nulli vidējā pozīcijā: (h,0,l). Šis ir viens no elegantajiem Millera notācijas aspektiem - tas dabiski risina šo īpašo gadījumu.
Ko nozīmē negatīvi indeksi?
Negatīvi indeksi nozīmē, ka plakne šķērso šo asi negatīvajā pusē no sākumpunkta. Kristalografi to pieraksta ar svītru virs skaitļa: (h̄kl). Fizisko īpašību ziņā (321) un (3̄2̄1̄) plaknes ir ekvivalentas - tās ir paralēlas plaknes pretējās sākumpunkta pusēs. Atšķirība ir svarīga galvenokārt, kad apraksta specifisku kristāla virsmu vai analizē orientācijas attiecības.
Kā Millera indeksi saistīti ar kristāla struktūru?
Millera indeksi apraksta paralēlu plakņu kopas, kas šķērso kristāla režģi. Attālums starp šīm plaknēm (d-attālums) ir atkarīgs gan no indeksiem, gan kristāla režģa parametriem. Augstāki indeksi nozīmē blīvāk izvietotas plaknes. Rentgenstaru difrakcijā plaknes ar specifiskām (hkl) vērtībām darbojas kā spoguļi rentgenstariem, un d-attālums nosaka difrakcijas leņķi saskaņā ar Brēga likumu. Šī sakarība ir iemesls, kāpēc difraktogrammu indeksācija - piešķirot (hkl) vērtības novērotajiem maksimumiem - ir fundamentāla struktūras noteikšanā.
[Pārējā tulkojuma turpinājums līdzīgā stilā...]
Atsauces
-
Miller, W. H. (1839). Traktāts par kristalogrāfiju. Cambridge: J. & J.J. Deighton.
-
Ashcroft, N. W., & Mermin, N. D. (1976). Cieto vielu fizika. Holt, Rinehart and Winston.
-
Hammond, C. (2015). Kristalogrāfijas un difrakcijas pamati (4. izd.). Oxford University Press.
-
Cullity, B. D., & Stock, S. R. (2014). Rentgenstaru difrakcijas elementi (3. izd.). Pearson Education.
-
Kittel, C. (2004). Ievads cieto vielu fizikā (8. izd.). Wiley.
-
Kelly, A., & Knowles, K. M. (2012). Kristalogrāfija un kristālu defekti (2. izd.). Wiley.
-
Starptautiskā Kristalogrāfijas savienība. (2016). Starptautiskās kristalogrāfijas tabulas, A sējums: Telpisko grupu simetrija. Wiley.
-
Giacovazzo, C., Monaco, H. L., Artioli, G., Viterbo, D., Ferraris, G., Gilli, G., Zanotti, G., & Catti, M. (2011). Kristalogrāfijas pamati (3. izd.). Oxford University Press.
-
Buerger, M. J. (1978). Elementārā kristalogrāfija: Ievads kristālu fundamentālajos ģeometriskājos aspektos. MIT Press.
-
Tilley, R. J. (2006). Kristāli un kristālu struktūras. Wiley.
Īss atsauces kopsavilkums
Millera indeksi (hkl) nodrošina standartizētu veidu, kā identificēt kristāla plaknes, izmantojot trīs veselus skaitļus, kas iegūti no plaknes šķērsojumu reciprokiem. Šī pieraksta sistēma darbojas visās kristāla sistēmās un kopš 1839. gada ir bijusi standarts kristalogrāfijā.
Vai jūs indeksējat difrakcijas spektrus, aprakstāt slīdes sistēmas metālos, norādāt pusvadītāju plāksnīšu orientācijas vai identificējat minerālu šķelšanās plaknes, Millera indeksi ir rīks, kuru jūs izmantosiet. Šis kalkulators veic aritmētiku - ņemot reciprokus, attīrot daļskaitļus un samazinot līdz zemākajiem terminiem - lai jūs varētu fokusēties uz kristalogrāfiskās nozīmes interpretāciju.