Preskoči na vsebino

Kalkulator Millerjevih indeksov - Pretvorba presečnih točk kristalne ravnine v (hkl)

Izračunajte Millerjeve indekse (hkl) iz presečnih točk kristalne ravnine. Hiter in natančen pretvornik za kristalografijo, XRD analizo in znanost materialov. Deluje za vse kristalne sisteme.

Kalkulator Millerjevih indeksov

Presečne točke kristalne ravnine

Vnesite presečne točke kristalne ravnine z x, y in z osmi. Uporabite '∞' ali 'neskončnost' za ravnine, vzporedne osi.

Vnesite število ali ∞ za neskončnost (vzporedno osi)

Vnesite število ali ∞ za neskončnost (vzporedno osi)

Vnesite število ali ∞ za neskončnost (vzporedno osi)

Milerjevi indeksi za to ravnino so:
(1,1,1)

Vizualizacija

Kaj so Milerjevi indeksi?

Milerjevi indeksi so sistem oznak, ki se uporablja v kristalografiji za določanje ravnin in smeri v kristalnih mrežah.

Za izračun Millerjevih indeksov (h,k,l) iz presečnih točk (a,b,c):

1. Vzemite recipročne vrednosti presečnih točk: (1/a, 1/b, 1/c) 2. Pretvorite v najmanjši nabor celih števil z enakim razmerjem 3. Če je ravnina vzporedna osi (presečna točka = neskončnost), je njen pripadajoči Millerjev indeks 0

  • Negativni indeksi so označeni s črtico nad številom, npr. (h̄,k,l)
  • Zapis (hkl) predstavlja specifično ravnino, medtem ko {hkl} predstavlja družino enakovrednih ravnin
  • Indeksi smeri so napisani v oglatih oklepajih [hkl], družine smeri pa so označene z <hkl>
Kalkulator nalaganja...
📚

Dokumentacija

Razumevanje Millerjevih indeksov: Praktični vodnik po notaciji kristalnih ravnin

Če ste kdaj delali s kristalografijo ali materialnimi vedami, veste, da je natančen opis kristalnih ravnin ključnega pomena. Milerjevi indeksi zagotavljajo prav to - sistemski način opredelitve katerekoli ravnine v kristalni mreži z le tremi celimi števili (h,k,l).

Ta kalkulator pretvarja presečišča ravnin vzdolž kristalografskih osi v standardno notacijo Millerjevih indeksov. Pri analizi kristalnih struktur ali interpretaciji rentgenskih difrakcijskih podatkov boste pogosto potrebovali sklicevanje na specifične ravnine. Namesto opisovanja vsake ravnine z njenimi geometrijskimi presečišči (kar je lahko zamudno), Milerjevi indeksi ponujajo zgoščen, splošno razumljen zapis.

Posebej uporabna je ta notacija zaradi poenostavitve komunikacije med raziskovalci. Namesto da bi rekli "ravnina, ki seka x-os pri 2, y-os pri 3 in z-os pri 6", preprosto navedete ravnino (321). Ta standardizacija je bila bistvena za kristalografijo, odkar jo je William Hallowes Miller predstavil leta 1839.

Kaj so Millerovi indeksi?

Millerovi indeksi so trije celi števili (h,k,l), ki enolično identificirajo družino vzporednih ravnin znotraj kristalne mreže. Ključna ugotovitev je: izpeljani so iz recipročnih vrednosti mest, kjer ravnina seka kristalografske osi.

Razmislite takole - če ravnina prereže kristal na specifičnih točkah vzdolž x, y in z osi, vzamete recipročne vrednosti teh presečnih vrednosti in jih reducirate na najmanjša cela števila. Ta matematični pristop, čeprav sprva abstrakten, ima praktično prednost: ravnine, ki so strukturno podobne, dobijo podobne indekse, vzporedne ravnine pa imajo enake indekse ne glede na njihov položaj.

Vizualna predstavitev Millerovih indeksov

[SVG vsebina ostaja enaka kot v izvirniku]

Kako izračunati Millerove indekse: Osnovna formula

Izračunavanje Millerovih indeksov poteka po preprostem štiristopenjskem postopku:

  1. Identificirajte presečne točke - Določite, kje ravnina seka x, y in z kristalografske osi (imenujte jih a, b in c)
  2. Vzemite recipročne vrednosti - Izračunajte 1/a, 1/b in 1/c
  3. Počistite ulomke - Pomnožite vse tri vrednosti z istim številom, da odpravite ulomke
  4. Reducirajte na najnižje izraze - Delite z največjim skupnim deliteljem, da dobite najmanjša cela števila

Matematična zveza je izražena kot:

h:k:l=1a:1b:1ch : k : l = \frac{1}{a} : \frac{1}{b} : \frac{1}{c}

Kjer so (h,k,l) Millerovi indeksi in a, b, c so presečne točke vzdolž vsake osi.

Pogosta zmeda: zakaj uporabljati recipročne vrednosti? Izkaže se, da ima ta izbira praktične koristi. Ravnine, ki nikoli ne sekajo osi (vzporedne z njo), bi imele neskončen presek - ampak 1/∞ je enak nič, kar nam da čisto numerično predstavitev. Ta eleganca je razlog, zakaj se Millerova notacija obdrži že skoraj dve stoletji.

Posebni primeri, s katerimi se boste srečali

Pri delu z Millerovimi indeksi boste naleteli na več mejnih primerov, ki sprva delujejo zapleteno:

Vzporedne ravnine - Ko ravnina teče vzporedno z osjo (je nikoli ne seka), je ta presek neskončen. Ker je 1/∞ = 0, postane pripadajoči indeks ničla. Tako ravnina, vzporedna y-osi, lahko dobi indekse (201), pri čemer srednja ničla kaže, da nikoli ne seka y-os.

Negativni preseki - Ravnine lahko sekajo osi na negativni strani izhodišča. V formalni kristalografski notaciji so negativni indeksi prikazani s črto nad številom: (h̄kl). V digitalnih kontekstih se pogosto piše kot (-h,k,l) za praktičnost.

Delni preseki - Včasih so vaši začetni preseki ulomki. Ni problema - preprosto pomnožite vse recipročne vrednosti z najmanjšim skupnim večkratnikom, da odpravite imenovalce. Pomembno je razmerje, ne absolutne vrednosti.

Vedno poenostavljajte - Pogosta napaka je puščanje indeksov v nereducirani obliki. (622) in (311) predstavljata isto družino ravnin, ampak kristalografi vedno uporabljajo (311) - najnižji nabor celih števil. Razmislite kot pri reduciranju ulomkov: vedno delite z največjim skupnim deliteljem.

Kako uporabljati ta kalkulator

Uporaba kalkulatorja je preprosta:

  1. Vnesite presečišča - Vnesite, kje ravnina seka x, y in z osi

    • Pozitivna števila za presečišča na pozitivni strani
    • Negativna števila za presečišča na negativni strani
    • Nič ali neskončnost za ravnine, vzporedne osi
  2. Pridobite takojšnje rezultate - Kalkulator samodejno izračuna Millerove indekse

  3. Preverite vizualizacijo - 3D predstavitev prikazuje orientacijo vaše ravnine v kristalni mreži

  4. Kopirajte za svoje delo - Prenesite rezultate neposredno v programsko opremo za analizo ali beležke

Praktičen primer

Poglejmo si konkretni primer. Recimo, da imate ravnino, ki seka:

  • x-os pri 2
  • y-os pri 3
  • z-os pri 6

Tukaj je izračun:

  1. Začnite s presečišči: (2, 3, 6)
  2. Vzemite recipročne vrednosti: (1/2, 1/3, 1/6)
  3. Počistite ulomke z množenjem z LCM(2,3,6) = 6: (3, 2, 1)
  4. Preverite, ali je reducibilno: GCD(3,2,1) = 1, torej smo končali

Rezultat: (321) ravnina

To je pogost primer, ker prikazuje celoten postopek. V praksi boste pogosto naleteli na preprostejše primere, kot so (100) ali (110) ravnine, ki predstavljajo glavne kristalne ploskve.

Realne aplikacije Millerjevih indeksov

Millerovi indeksi se pojavljajo v več področjih, kjer je pomembna kristalna struktura. Tukaj so mesta, kjer jih boste najpogosteje srečali:

Rentgenska difrakcijska analiza

Ko analizirate rentgenske difrakcijske (XRD) vzorce, so Millerovi indeksi nepogrešljivi. Vsak difrakcijski vrh ustreza specifičnemu naboru kristalnih ravnin. Razmerje med medsebojno razdaljo ravnin in difrakcijskimi koti sledi Braggovi enačbi:

nλ=2dhklsinθn\lambda = 2d_{hkl}\sin\theta

Kjer dhkld_{hkl} predstavlja razdaljo med ravninami z indeksi (h,k,l), λ\lambda je valovna dolžina rentgenskih žarkov, in θ\theta je difrakcijski kot.

V praktičnem XRD delu boste pogosto potrebovali indeksirati difrakcijske vrhove - ujemanje opaženih vrhov s specifičnimi (hkl) ravninami. Ta postopek je temeljnega pomena za identifikacijo neznanih kristaliničnih materialov ali potrditev kristalne strukture po sintezi.

Materialno inženirstvo

Lastnosti površine - Različne kristalne ravnine izpostavljajo različne atomske razporeditve, kar pomeni, da imajo različne energije površine. Na primer, (111) ploskev FCC kovine ima nižjo površinsko energijo kot (100) ali (110) ploskve. To je izjemno pomembno v katalizi, kjer so hitrosti reakcij odvisne od izpostavljenih kristalnih ploskev.

Mehanske lastnosti - Kovine se deformirajo vzdolž specifičnih kristalografskih sistemov zdrsa. V FCC kovinah, kot je aluminij, se zdrs dogaja na {111} ravninah v <110> smereh. Razumevanje aktivnih ravnin med deformacijo pomaga napovedati obnašanje materiala pod obremenitvijo.

Izdelava polprevodnikov - Silicijeve rezine se režejo vzdolž specifičnih kristalografskih ravnin, najpogosteje (100) ali (111). Izbira vpliva na epitaksialne hitrosti rasti, obnašanje dopiranja in delovanje naprave. Po IEEE standardih za polprevodniške kristale, orientacija (100) prevladuje v sodobni CMOS proizvodnji.

Analiza teksture - Ko se kovine valjajo, kujejo ali vlečejo, zrna razvijejo preferenčne orientacije (tekstura). Opis te teksture zahteva Millerove indekse za določitev ravnin, ki se poravnajo s smermi predelave. Ta tekstura neposredno vpliva na lastnosti, kot so magnetno obnašanje v elektrnih jeklih in duktilnost v aluminijastih ploščah.

Mineralogija

Geologi opisujejo kristalne ploskve mineralov z Millerjevimi indeksi. Ko preučujete kristal kremena, te ravne ploskve ustrezajo specifičnim (hkl) ravninam. Cepitev - kako se minerali lomijo vzdolž določenih ravnin - je prav tako opisana s to notacijo. Popolna {100} cepitev halit (kuhinjske soli) ali {111} cepitev fluorita sta klasična primera.

Alternativni sistemi oznak

Čeprav Miller indeksi prevladujejo v kristalografiji, boste občasno naleteli na alternative:

Miller-Bravaisovi indeksi - Za heksagonalne kristale, štirimestni sistem (hkil), kjer je i=-(h+k), bolje zajame heksagonalno simetrijo. Srečali jih boste pri delu z cinkom, magnezijem in številnimi polprevodniki, kot je GaN. Redundantni četrti indeks olajša prepoznavanje enakovrednih ravnin - nekaj, kar ni očitno v tritočkovni notaciji za heksagonalne sisteme.

Webrovi simboli in Naumannova notacija - Pojavljajo se predvsem v starejši mineralošaki literaturi. Večina sodobnih del se je preusmerila na Miller indekse, vendar jih lahko srečate pri branju zgodovinskih člankov.

Direktni mrežni vektorji - Nekatere teoretične raziskave opisujejo ravnine z direktnimi mrežnimi vektorji namesto Miller indeksov. Ta pristop je pogost v računalniški znanosti materialov, kjer delate neposredno z atomskimi koordinatami.

Kljub tem alternativam ostajajo Miller indeksi lingua franca kristalografije, ker delujejo za vseh sedem kristalnih sistemov in zagotavljajo intuitiven okvir za večino aplikacij.

Zgodovinski razvoj

William Hallowes Miller, britanski mineralog, je ta sistem notacije predstavil leta 1839 v svoji "Razpravi o kristalografiji". Zanimivo je, da Miller ni izumil ideje indeksiranja kristalnih ploskev - pred tem so obstajali sistemi, kot so Weissovi parametri. Millerjev preboj je bila uporaba recipročnih vrednosti presečišč, ki so elegantno obravnavale vzporedne ravnine (kjer so presečišča neskončna) in poenostavile številne izračune.

Pravi pomen sistema je postal jasen z Maxovo von Laueovo odkritjem rentgenske difrakcije leta 1912. William Henry Bragg in William Lawrence Bragg (oče in sin) sta takoj prepoznala, kako Miller indeksi popolnoma opisujejo ravnine, odgovorne za difrakcijske vrhove. Njuno delo iz leta 1913 o določanju kristalne strukture je utrdilo Miller indekse kot bistvena orodja.

Skozi 20. stoletje, ko se je rentgenska kristalografija razširila iz mineralogije v metalurgijo, fiziko trdnih snovi in nazadnje v proteinsko kristalografijo, so Miller indeksi postali nepogrešljivi. Danes so nenadomestljivi na področjih, ki si jih Miller nikoli ni zamislil - od analize polprevodniških heterostruktur do načrtovanja nanodelčnih katalizatorjev.

Primeri implementacij

Če potrebujete programsko izračunati Millerove indekse - morda obdelujete velike nabore podatkov ali gradite analizne cevovode - tukaj so implementacije v več jezikih. Vsaka obravnava ključne izzive: jemanje recipročnih vrednosti, čiščenje ulomkov in reduciranje na najnižje člene.

Implementacija v Pythonu

1import math
2import numpy as np
3
4def calculate_miller_indices(intercepts):
5    """
6    Izračun Millerovih indeksov iz presečišč
7    
8    Args:
9        intercepts: Seznam treh presečišč [a, b, c]
10        
11    Returns:
12        Seznam treh Millerovih indeksov [h, k, l]
13    """
14    # Obravnava neskončnih presečišč (vzporednih osi)
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    # Najdi neničelne vrednosti za izračun 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    # Merilo do razumnih celih števil (izogibanje problemom s plavajočo vejico)
29    scale = 1000
30    scaled = [round(r * scale) for r in non_zero]
31    
32    # Najdi GCD
33    gcd_value = np.gcd.reduce(scaled)
34    
35    # Pretvori nazaj v najmanjša cela števila
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# Primer uporabe
46intercepts = [2, 3, 6]
47indices = calculate_miller_indices(intercepts)
48print(f"Millerovi indeksi za presečišča {intercepts}: {indices}")  # Izhod: [3, 2, 1]
49

Implementacija v JavaScriptu

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  // Obravnava neskončnih presečišč
20  const reciprocals = intercepts.map(intercept => {
21    if (intercept === 0 || !isFinite(intercept)) {
22      return 0;
23    }
24    return 1 / intercept;
25  });
26  
27  // Najdi neničelne vrednosti za izračun GCD
28  const nonZeroReciprocals = reciprocals.filter(val => val !== 0);
29  
30  if (nonZeroReciprocals.length === 0) {
31    return [0, 0, 0];
32  }
33  
34  // Merilo do celih števil za izogibanje problemom s plavajočo vejico
35  const scale = 1000;
36  const scaled = nonZeroReciprocals.map(val => Math.round(val * scale));
37  
38  // Najdi GCD
39  const divisor = gcdMultiple(scaled);
40  
41  // Pretvori v najmanjša cela števila
42  const millerIndices = reciprocals.map(val => 
43    val === 0 ? 0 : Math.round((val * scale) / divisor)
44  );
45  
46  return millerIndices;
47}
48
49// Primer
50const intercepts = [2, 3, 6];
51const indices = calculateMillerIndices(intercepts);
52console.log(`Millerovi indeksi za presečišča ${intercepts}: (${indices.join(',')})`);
53// Izhod: Millerovi indeksi za presečišča 2,3,6: (3,2,1)
54

Implementacija v Javi

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        // Izračun recipročnih vrednosti
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        // Štetje neničelnih vrednosti
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        // Merilo do celih števil
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        // Najdi GCD
60        int divisor = gcdMultiple(scaled);
61        
62        // Pretvori v najmanjša cela števila
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("Millerovi indeksi za presečišča " + 
80                           Arrays.toString(intercepts) + ": " + 
81                           Arrays.toString(indices));
82        // Izhod: Millerovi indeksi za presečišča [2.0, 3.0, 6.0]: [3, 2, 1]
83    }
84}
85

Implementacija v Excel VBA

1' Excel VBA funkcija za izračun Millerovih indeksov
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    ' Izračun recipročnih vrednosti
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    ' Štetje neničelnih vrednosti
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    ' Merilo do celih števil
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    ' Najdi GCD
59    gcdVal = scaledVals(1)
60    For i = 2 To nonZeroCount
61        gcdVal = GCD(gcdVal, scaledVals(i))
62    Next i
63    
64    ' Izračun Millerovih indeksov
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' Uporaba v Excelu:
102' =CalculateMillerIndices(2, 3, 6)
103' Rezultat: (3,2,1)
104

Implementacija v C++

1#include <iostream>
2#include <vector>
3#include <cmath>
4#include <numeric>
5#include <algorithm>
6
7// Izračun GCD dveh števil
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// Izračun GCD več števil
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// Izračun Millerovih indeksov iz presečišč
31std::vector<int> calculateMillerIndices(const std::vector<double>& intercepts) {
32    std::vector<double> reciprocals;
33    
34    // Izračun recipročnih vrednosti
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    // Najdi neničelne vrednosti
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    // Merilo do celih števil
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    // Najdi GCD
63    int divisor = gcdMultiple(scaled);
64    
65    // Pretvori v najmanjša cela števila
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 << "Millerovi indeksi za presečišča [";
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    // Izhod: Millerovi indeksi za presečišča [2, 3, 6]: (3,2,1)
96    
97    return 0;
98}
99

Praktični primeri in rešitve

Reševanje primerov pomaga utrditi postopek izračuna:

Primer 1: Standardni izračun

  • Presečišča: (2, 3, 6) → Recipročne vrednosti: (1/2, 1/3, 1/6) → Poenostavitev ulomkov (×6): (3, 2, 1)
  • Rezultat: (321)

Primer 2: Ravnina vzporedna osi

  • Presečišča: (1, ∞, 2) → Recipročne vrednosti: (1, 0, 1/2) → Poenostavitev ulomkov (×2): (2, 0, 1)
  • Rezultat: (201) - Ničla kaže, da ravnina nikoli ne seka y-osi

Primer 3: Negativno presečišče

  • Presečišča: (-1, 2, 3) → Recipročne vrednosti: (-1, 1/2, 1/3) → Poenostavitev ulomkov (×6): (-6, 3, 2)
  • Rezultat: (-6,3,2) ali kristalografsko zapisano kot (6̄32)

Primer 4: Delna presečišča

  • Presečišča: (1/2, 1/3, 1/4) → Recipročne vrednosti: (2, 3, 4) → Že cela števila
  • Rezultat: (234) - Ko so presečišča ulomki, so recipročne vrednosti pogosto cela števila

Primer 5: Glavna kubična ploskev

  • Presečišča: (1, ∞, ∞) → Recipročne vrednosti: (1, 0, 0)
  • Rezultat: (100) - Ena od šestih primarnih ploskev kubičnega kristala

Pogosto zastavljena vprašanja

Čemu služijo Millerovi indeksi?

Millerovi indeksi identificirajo specifične ravnine v kristalnih mrežah. Uporabljali jih boste nenehno pri rentgenski difrakcijski analizi (indeksiranje vrhov), materialnem inženirstvu (opisovanje drsnih ravnin in cepitve), izdelavi polprevodnikov (določanje orientacij rezin), in mineralogiji (karakterizacija kristalnih ploskev). So standardni jezik za razpravo o kristalografskih ravninah v vseh teh področjih.

Kako obravnavam ravnine, vzporedne osi?

Ko ravnina poteka vzporedno osi in je nikoli ne seka, je njen presek pri neskončnosti. Ker je 1/∞ = 0, je ustrezen Millerov indeks ničla. Ravnina, vzporedna y-osi, dobi ničlo na srednji poziciji: (h,0,l). To je ena od elegantnih lastnosti Millerove notacije - naravno obravnava ta rob.

Kaj pomenijo negativni indeksi?

Negativni indeksi pomenijo, da ravnina seka os na negativni strani izhodišča. Kristalografi to zapišejo z črtico nad številom: (h̄kl). Z vidika fizikalnih lastnosti sta ravnini (321) in (3̄2̄1̄) enakovredni - sta vzporedni ravnini na nasprotnih straneh izhodišča. Razlika je pomembna predvsem pri opisovanju specifične kristalne ploskve ali analizi orientacijskih razmerij.

Kako so Millerovi indeksi povezani s kristalno strukturo?

Millerovi indeksi opisujejo nize vzporednih ravnin, ki sekajo kristalno mrežo. Razmak med temi ravninami (d-razmak) je odvisen od indeksov in parametrov kristalne mreže. Višji indeksi pomenijo bolj gosto postavljene ravnine. Pri rentgenski difrakciji delujejo ravnine s specifičnimi (hkl) vrednostmi kot zrcala za rentgenske žarke, pri čemer d-razmak določa difrakcijski kot po Braggovi enačbi. Ta povezava je razlog, zakaj je indeksiranje difrakcijskih vzorcev - dodeljevanje (hkl) vrednosti opaženim vrhovom - temeljno za določanje strukture.

Kakšna je razlika med Millerjevimi in Miller-Bravaisovimi indeksi?

Millerovi indeksi (hkl) delujejo za vse kristalne sisteme, toda heksagonski kristali predstavljajo poseben izziv. V heksagonskih sistemih kristalografsko enakovredne ravnine nimajo očitno podobnih Millerjevih indeksov. Miller-Bravaisovi indeksi (hkil) dodajo odvečni četrti indeks, kjer je i = -(h+k). To eksplicitno prikaže heksagonsko simetrijo - enakovredne ravnine imajo podobno izgledajoče indekse. Srečali jih boste predvsem pri delu s heksagonalnimi kovinami (Mg, Zn, Ti) ali wurtzitnimi polprevodniki (GaN, ZnO).

Kako izračunam kote med kristalnimi ravninami?

Za kubične kristale je kot θ med ravninami (h₁k₁l₁) in (h₂k₂l₂):

cosθ=h1h2+k1k2+l1l2(h12+k12+l12)(h22+k22+l22)\cos\theta = \frac{h_1h_2 + k_1k_2 + l_1l_2}{\sqrt{(h_1^2 + k_1^2 + l_1^2)(h_2^2 + k_2^2 + l_2^2)}}

To je v bistvu skalarni produkt normalnih vektorjev. Za nekubične sisteme (ortorombični, tetragonalni, itd.) potrebujete metrični tenzor, ki upošteva nepravokotne osi ali neenake parametre mreže. Večina kristalografske programske opreme te izračune opravi samodejno.

Kako se d-razmak nanaša na Millerove indekse?

D-razmak - pravokotna razdalja med sosednjimi vzporednimi ravninami - se zmanjšuje z naraščanjem indeksov. Za kubične kristale z parametrom mreže a:

dhkl=ah2+k2+l2d_{hkl} = \frac{a}{\sqrt{h^2 + k^2 + l^2}}

Ta preprosta formula je razlog, zakaj so kubični sistemi ugodni za poučevanje. Za druge kristalne sisteme formula vključuje dodatne parametre mreže (b, c in kote α, β, γ). Mednarodne tabele za kristalografijo zagotavljajo formule za vseh sedem kristalnih sistemov.

Ali so lahko Millerovi indeksi ulomki?

Ne, vedno so cela števila po konvenciji. Če vaš izračun da ulomke kot (3/2, 1, 1/2), pomnožite vse z LCM imenovalca, da dobite (3, 2, 1). Zahteva po celih številih ohranja notacijo standardizirano - vsakdo opisuje isto ravnino na enak način.

Kako eksperimentalno določim Millerove indekse?

Za velike monokristale optična goniometrija izmeri kote med kristalnimi ploskvami, ki jih lahko pretvorimo v Millerove indekse. Pogosteje boste uporabili rentgensko ali elektronsko difrakcijo. Difrakcijski vzorec pokaže pike ali vrhove pod specifičnimi koti, vsak ustreza nizu mrežnih ravnin. Z merjenjem teh kotov in uporabo Braggove enačbe lahko dodelite (hkl) vrednosti vsakemu odsevanju - proces, imenovan indeksiranje. Sodobni difraktometri s programsko opremo večino tega avtomatizirajo, toda razumevanje osnovne geometrije ostaja pomembno.

Kateri so najpogostejši Millerovi indeksi?

V kubičnih kristalih boste pogosto srečali:

  • (100), (010), (001) - Šest ploskev kocke
  • (110), (101), (011) - Diagonalne ravnine, ki sekajo dve osi
  • (111) - Oktaedrska ravnina, ki enako seka vse tri osi
  • (112) - Pogosta drsna ravnina v BCC kovinah, kot je železo

Te ravnine z nizkim indeksom imajo največji d-razmak in najnižjo površinsko energijo, zato so najpogosteje opažene kristalne ploskve in preferenčne drsne ravnine.

Ali to deluje za vseh sedem kristalnih sistemov?

Da. Notacija Millerjevih indeksov velja univerzalno za kubične, tetragonalne, ortorombične, heksagonalne, trigonalne, monoklinske in triklinične sisteme. Postopek izračuna (preseki → recipročne vrednosti → cela števila) ostaja enak ne glede na kristalni sistem. Vendar heksagonski sistemi pogosto uporabljajo štirimestno Miller-Bravaisovo notacijo za jasnost.

Kakšna je natančnost izračuna?

Kalkulator uporablja eksaktno celoštevilsko aritmetiko po pretvorbi iz lebdečih decimalnih vrednosti, kar zagotavlja matematično natančnost. Glavni vir negotovosti je običajno določanje samih presečišč - še posebej pri merjenju iz eksperimentalnih podatkov ali modelov kristalne strukture. Algoritem obravnava vse mejne primere: vzporedne ravnine, negativne preseke in delne preseke.

Reference

  1. Miller, W. H. (1839). Razprava o kristalografiji. Cambridge: Za J. & J.J. Deighton.

  2. Ashcroft, N. W., & Mermin, N. D. (1976). Fizika trdnih snovi. Holt, Rinehart and Winston.

  3. Hammond, C. (2015). Osnove kristalografije in difrakcije (4. izd.). Oxford University Press.

  4. Cullity, B. D., & Stock, S. R. (2014). Elementi rentgenske difrakcije (3. izd.). Pearson Education.

  5. Kittel, C. (2004). Uvod v fiziko trdnih snovi (8. izd.). Wiley.

  6. Kelly, A., & Knowles, K. M. (2012). Kristalografija in kristalne napake (2. izd.). Wiley.

  7. Mednarodna zveza za kristalografijo. (2016). Mednarodne tabele za kristalografijo, zvezek A: Simetrija prostorskih skupin. Wiley.

  8. Giacovazzo, C., Monaco, H. L., Artioli, G., Viterbo, D., Ferraris, G., Gilli, G., Zanotti, G., & Catti, M. (2011). Osnove kristalografije (3. izd.). Oxford University Press.

  9. Buerger, M. J. (1978). Osnovna kristalografija: Uvod v temeljne geometrijske značilnosti kristalov. MIT Press.

  10. Tilley, R. J. (2006). Kristali in kristalne strukture. Wiley.

Hiter povzetek

Millerovi indeksi (hkl) zagotavljajo standardiziran način za identifikacijo kristalnih ravnin z uporabo treh celih števil, izpeljanih iz recipročnih vrednosti presečišč ravnine. Notacija deluje v vseh kristalnih sistemih in je standard v kristalografiji od leta 1839.

Ne glede na to, ali indeksirate difrakcijske vzorce, opisujete drsne sisteme v kovinah, določate orientacije polprevodniških rezin ali identificirate ravnine cepitve mineralov, so Millerovi indeksi orodje, ki ga boste uporabili. Ta kalkulator opravi aritmetiko - jemanje recipročnih vrednosti, čiščenje ulomkov in redukcijo na najnižje člene - tako da se lahko osredotočite na interpretacijo kristalografskega pomena.