Numerical work on the rotation group needs orientations spread as evenly as possible over it - to integrate an ODF, to sample one, or to search for a best fit. As on the sphere, there is no perfectly even arrangement, and the constructions on offer differ in how close they come.
plottingConvention.default('y↑→x');
% define a crystal symmetry
cs = crystalSymmetry('432')cs = crystalSymmetry (⊙c→a)
symmetry: 432
elements: 24
a, b, c : 1, 1, 1The Equispaced Grid
equispacedSO3Grid covers the fundamental region of the given symmetry with a nearly constant spacing.
ori = equispacedSO3Grid(cs,'resolution',5*degree)ori = SO3Grid (432 → y↑→x)
grid: 4923 orientations, resolution: 5°Just under 5000 orientations at \(5^\circ\) for cubic symmetry. Seen in axis angle space they fill the fundamental region evenly.
plot(ori,'axisAngle')plot 2000 random orientations out of 4923 given orientations
Checking for Equidistribution
Even spacing is easier to claim than to achieve, and the honest test is to treat the grid as a data set: an ODF built from it should be the uniform one, and the pole figures of a uniform ODF are flat at 1.
odf = unimodalODF(ori)
plotPDF(odf,Miller({1,0,0},{1,1,0},{1,1,1},cs))
mtexColorbarodf = SO3FunRBF (432 → y↑→x)
multimodal components
kernel: de la Vallee Poussin, halfwidth 10°
center: 4923 orientations, resolution: 5°
weight: 1
Between 0.93 and 1.02 - flat to within a few percent, which is what a usable grid looks like.
The Regular Grid
regularSO3Grid instead steps through the three Euler angles regularly.
ori = regularSO3Grid(cs,'resolution',5*degree)ori = orientation (432 → y↑→x)
size: 72 × 19 × 18Five times as many orientations for the same nominal resolution, 24624 against 4923.
plot(ori,'axisAngle')plot 2000 random orientations out of 24624 given orientations
And the extra points do not buy uniformity. The same test now runs from 0.79 to 2.62 - the grid piles up wherever Euler angle space is compressed, exactly as the regular grid on the sphere piles up at the poles, see Spherical Grids.
odf = unimodalODF(ori)
plotPDF(odf,Miller({1,0,0},{1,1,0},{1,1,1},cs))
mtexColorbarodf = SO3FunRBF (432 → y↑→x)
multimodal components
kernel: de la Vallee Poussin, halfwidth 10°
center: 24624 orientations
Use the regular grid when the Euler angle raster itself is wanted, for instance to write an ODF to a file that expects one, and the equispaced grid for everything else.
Grids Around a Given Orientation
localOrientationGrid covers a ball around one orientation rather than the whole region, which is what a local search or a perturbation study needs.
center = orientation.byEuler(10*degree,20*degree,30*degree,cs);
ori = localOrientationGrid(center,10*degree,'resolution',2.5*degree)ori = orientation (432 → y↑→x)
size: 265 × 1265 orientations arranged in shells about the centre. The outermost shell sits at 8.75 degree, half a resolution step inside the radius that was asked for.
max(angle(ori,center)) ./ degreeans =
8.7500Next
Sampling an ODF at random rather than on a grid is Random Sampling. Curves through orientation space, along which many real textures lie, are Fibres of Orientations.
Citing this page.
This page is part of the documentation of
MTEX, a free and open
source MATLAB toolbox for analyzing and modeling crystallographic textures.
It was written by The MTEX Developers and is published at
https://mtex-toolbox.github.io/OrientationGrid.html.
If you use MTEX, or reuse text or figures from this page, in your research,
please cite
F. Bachmann, R. Hielscher, H. Schaeben: Texture Analysis with MTEX - Free and Open Source Software Toolbox, Solid State Phenomena 160 (2010), 63-68. 10.4028/www.scientific.net/SSP.160.63
BibTeX
@article{bachmann2010mtex,
author = {F. Bachmann and R. Hielscher and H. Schaeben},
title = {Texture Analysis with MTEX - Free and Open Source Software Toolbox},
journal = {Solid State Phenomena},
volume = {160},
pages = {63-68},
year = {2010},
doi = {10.4028/www.scientific.net/SSP.160.63},
url = {https://doi.org/10.4028/www.scientific.net/SSP.160.63}
}
Other papers describing specific MTEX methods are listed under Publications — please cite the one that best fits your application. The MTEX source code is licensed under the GNU General Public License v2.0; the text and figures of this documentation are licensed under CC BY 4.0, which permits reuse — including by automated systems — provided The MTEX Developers and this page are credited.