Fractional to Orthonormal Coordinates Conversion Tutorial
This problem often comes up in crystallography where a unit cell is defined by a non-orthogonal basis (called fractional coordinates). Conversions between orthonormal and fractional coordinates have to be frequently performed. This describes one particular case of such transformation, where a is taken along x-axis and b lies in x-y plane.
We want to transform point in fractional coordinates into orthonormal coordinates, producing point . Fractional coordinates are weights, linear combination of which with vectors produces point :
To carry out such transformation we have to multiply by :
It is clear that and
First two coordinates of vector c are easily found using the dot product:
From which we find that:
The third coordinate of c is found using the cross product:
Where V is volume of the unit cell and is equal to:
Finally the transformation matrix from to is:
To carry out the inverse transformation from orthonormal to fractional coordinates we have to find the inverse of M:
Inverse of M can be obtained from Cramer's rule:
From which we get:
Source Code
C++ source: class FracOrth for conversion between fractional and orthonormal coordinates: FracOrth.h FracOrth.cpp
Here is a dos program which does fractional to orthonormal coordinates conversion using the above class: frac.cpp