A <fibre.fibre.html fibre> is to rotation space what a straight line is to Euclidean space: the shortest path between two rotations, and the set traced out by continuing along it. Fibres matter because many common textures are concentrated around such curves: all orientations that put one crystal direction along one specimen direction, with the rotation about that direction left free.
% consider cubic symmetry
cs = crystalSymmetry('432');
% two random orientations
oriA = orientation.rand(cs)oriA = orientation (432 → y↓→x)
Bunge Euler angles in degree
phi1 Phi phi2
156.958 161.468 197.878oriB = orientation.rand(cs)oriB = orientation (432 → y↓→x)
Bunge Euler angles in degree
phi1 Phi phi2
156.716 99.1642 118.921Under crystal symmetry an orientation stands for a whole set of equivalent ones, so "the path between A and B" is only well defined once the equivalent of oriB closest to oriA has been picked out.
oriB = oriB.project2FundamentalRegion(oriA)oriB = orientation (432 → y↓→x)
Bunge Euler angles in degree
phi1 Phi phi2
262.796 149.782 288.448The connecting fibre is then
f = fibre(oriA,oriB)
plot(oriA,'axisAngle','filled','MarkerSize',20)
hold on
plot(oriB,'axisAngle','filled','MarkerSize',20)
plot(f,'lineWidth',3,'lineColor','red')
hold off
axis offf = fibre (432 → y↓→x)
h || r: (9̅7̅3̅) || (-2,7,4)
o1 → o2: (157°,161.5°,197.9°) → (262.8°,149.8°,288.4°)
A Fibre is a Circle
Rotation space is curved, so a fibre is better thought of as a great circle on a sphere than as a straight line. Continued past its two endpoints it closes up, which the option 'full' does.
f = fibre(oriA,oriB,'full')
hold on
plot(f,'lineWidth',3,'lineColor','red')
hold offf = fibre (432 → y↓→x)
h || r: (9̅7̅3̅) || (-2,7,4)
The result looks like several disconnected arcs, but it is one circle: the plot shows the fundamental region only, and the circle leaves it and re-enters as a symmetrically equivalent piece. Drawn in the complete rotation space, without folding anything back, it is a single closed curve.
plot(oriA,'axisAngle','filled','MarkerSize',20,'complete')
hold on
plot(oriB,'axisAngle','filled','MarkerSize',20)
plot(f,'axisAngle','lineWidth',3,'lineColor','red')
hold off
axis off
The Two Directions Behind a Fibre
The other way to describe the same set: a fibre is all rotations that take one crystal direction h onto one specimen direction r. Both are stored on the fibre and read back as properties.
f.hans = Miller (432)
h k l
-0.77 -0.5887 -0.2461f.rans = vector3d (y↓→x)
x y z
-0.243 0.839 0.487These are the axis of the rotation from oriA to oriB, written once in specimen coordinates and once in crystal coordinates. Nothing else could be left fixed by both orientations.
r = axis(oriB,oriA)r = vector3d (y↓→x)
x y z
-0.243 0.839 0.487h = inv(oriA) * axis(oriB,oriA)h = Miller (432)
h k l
-0.77 -0.5887 -0.2461Given the pair, the fibre is defined directly, without reference to the two orientations it happened to come from.
f = fibre(h,r)f = fibre (432 → y↓→x)
h || r: (9̅7̅3̅) || (-2,7,4)Sampling a Fibre
orientation discretises a fibre into a list of orientations, which is what a plot or a calculation along the fibre needs.
ori = orientation(f)
hold on
plot(ori)
hold offori = orientation (432 → y↓→x)
size: 2000 × 1
Next
Fibres of the standard texture components, and the fibre ODFs built on them, are Fibres of Orientations and Fibre ODFs.