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.hFracOrth.cpp
Here is a dos program which does fractional to orthonormal coordinates conversion using the above class: frac.cpp