Krystallografiske punkt

Et krystallografisk punkt noteres som q r s der q er koordinat langs x-aksen med enhet a, r er koordinat langs y-aksen med enhet b, og s er koordinat langs z-aksen med enhet c.

De fire punkta i figuren under skrives dermed som:

$$\text{p1:}\quad 1\text{ }0\text{ }0$$$$\text{p2:}\quad 0\text{ }1\text{ }0$$$$\text{p3:}\quad 0\text{ }1\text{ }1$$$$\text{p4:}\quad 1\text{ }\frac{1}{2}\text{ }1$$

image-3.png

Hva er poenget? Et krystallografisk punkt angir en unik posisjon i enhetscellen (for eksempel posisjonen til et atom), som er uavhengig av krystallsystemet (med unntak av hexagonalt). Eksemplevis vil et krystallografisk punk som bare inneholder verdier null eller 1 være plassert på ett hjørne av enhetscellen (som p1, p2 og p3 i figuren over).

In [1]:
punkt_hjorner = [[i,j,k] for i in (0,1) for j in (0,1) for k in (0,1)]
print(punkt_hjorner)
[[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]

...eller sånn som punkt egentlig skal noteres:

In [2]:
tekst=''
for p in punkt_hjorner:
    tekst=tekst+'{} {} {},  '.format(p[0],p[1],p[2])
print(tekst)
0 0 0,  0 0 1,  0 1 0,  0 1 1,  1 0 0,  1 0 1,  1 1 0,  1 1 1,  

Dersom enhetscellen er kubisk, kan vi også lett finne f.eks. avstander mellom punkt(med enhet a, eller antall a'er om du vil) i enhetscellen ved enkel videregående matte...

In [3]:
p1 = [1, 0, 0]
p2 = [0, 1, 0]
p3 = [0, 1, 1]
p4 = [1, 0.5, 1]

def avstandMellomPunkt(pa,pb):
    return ( (pb[0]-pa[0])**2 + (pb[1]-pa[1])**2 + (pb[2]-pa[2])**2 )**(0.5)

print(avstandMellomPunkt(p1,p2))
1.4142135623730951

som er en klassiker inne sjangeren Pytagoras... (som vi lett kunne funnet med enklere midler).

Romdiagonalen:

In [4]:
print(avstandMellomPunkt(p1,p3))
1.7320508075688772

Den faktiske avstanden finner vi enkelt & greit med å multiplisere med verdien av a.

Dersom krystallsystemet ikke er kubisk, må vi gjøre en koordinat-transformasjon for å finne tilsvarende avstander. Eksemplevis for en ortorombisk enhetscelle med noen passe vilkårlige verdier på dimensjonenen:

In [5]:
a = 1.0
b = 1.2
c = 1.5

def transformerTilHeltVanligKoordinatSystem(p, a, b, c):
    return [p[0]*a, p[1]*b, p[2]*c]

p1_t = transformerTilHeltVanligKoordinatSystem(p1, a,b,c)
p3_t = transformerTilHeltVanligKoordinatSystem(p3, a,b,c)

print(avstandMellomPunkt(p1_t, p3_t))
2.1656407827707715

Disclaimer:This site is designed for educational purposes only. There are most likely errors, mistakes, typos, and poorly crafted statements that are not detected yet... www.ntnu.edu/employees/nils.p.vedvik

Copyright 2023, All rights reserved