Fibres edit page

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.878
oriB = orientation.rand(cs)
oriB = orientation (432 → y↓→x)
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  156.716 99.1642 118.921

Under 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.448

The 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 off
f = 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 off
f = 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.h
ans = Miller (432)
      h       k       l
  -0.77 -0.5887 -0.2461
f.r
ans = vector3d (y↓→x)
       x      y      z
  -0.243  0.839  0.487

These 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.487
h = inv(oriA) * axis(oriB,oriA)
h = Miller (432)
      h       k       l
  -0.77 -0.5887 -0.2461

Given 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 off
ori = 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.