-
git-svn-id: https://svn.code.sf.net/p/dct/code/trunk@901 4c865b51-4357-4376-afb4-474e03ccb993
git-svn-id: https://svn.code.sf.net/p/dct/code/trunk@901 4c865b51-4357-4376-afb4-474e03ccb993
gtTwinOrientations.m 2.94 KiB
function [g_twins] = gtTwinOrientations(r_vectors, twin_angle, twin_axis, phaseid, plotOn)
% [g_twins] = gtTwinOrientations(r_vectors, twin_angle, twin_axis, phaseid, plotOn)
% -------------------------------------------------------------------------------------------
% use r_vectors.mat output from gtReadGrains.m
%
% pass in an R vector, return the g (crystal to sample transformation) plus
% all the twin variants
grainID = r_vectors(1);
Rvec = r_vectors(2:4);
load('parameters.mat');
spacegroup = parameters.cryst(phaseid).spacegroup;
lp = parameters.cryst(phaseid).latticepar;
% come back to Miller notation for direction
if size(twin_axis,2) == 4
u = twin_axis(1)-twin_axis(3);
v = twin_axis(2)-twin_axis(3);
w = twin_axis(4);
twin_axis = [u v w];
end
% the basic g matrix
cry2sam = Rod2g(Rvec);
g_twin = [];
% Just look for sigma 3 case (cubic)
%twin_angle=60
%twin_axis=[1 1 1]
% Just the tensile twin case (hexagonal)
%twin_angle=85
%twin_axis=[1 1 -2 0]
% Normalize twin_axis
twin_axis = twin_axis/norm(twin_axis);
% Symmetry equivilents
twin_axis = gtGetReflections(twin_axis, spacegroup);
if spacegroup==225 % fcc case
% in crystal system, parent to twin transformation
for ii=1:size(twin_axis, 1)
rotcomp = gtMathsRotationMatrixComp(twin_axis(ii, :)','col');
cry2twin = gtMathsRotationTensor(twin_angle, rotcomp);
g_twins(ii).g = cry2sam*cry2twin;
% i.e. normally, pl = g*[h k l]' where g comes from Rod2g
% here, pl = g*(twin_operation*[h k l]')
% so our "new" g is g*twin_operation
end
elseif spacegroup==194 % hexagonal case
% convert from hex to cart - A matrix for a UVW DIRECTION (A matrix for a
% UVW direction)
% Miller notation for directions <UVW>
[~,Amat] = gtCrystHKL2CartesianMatrix(lp);
for ii=1:size(twin_axis, 1)
twin_axis_cart(ii, :) = Amat*twin_axis(ii, :)';
rotcomp = gtMathsRotationMatrixComp(twin_axis_cart(ii, :)','col');
cry2twin = gtMathsRotationTensor(twin_angle, rotcomp);
g_twins(ii).g = cry2sam*cry2twin;
end
end
if plotOn
figure();
for ii=1:size(g_twins,2)
subplot(3,4,ii)
hold on
x=cry2sam*[1 0 0]';
y=cry2sam*[0 1 0]';
z=cry2sam*[0 0 1]';
plot3([0 x(1)], [0 x(2)], [0 x(3)], 'r:')
plot3([0 y(1)], [0 y(2)], [0 y(3)], 'g:')
plot3([0 z(1)], [0 z(2)], [0 z(3)], 'b:')
x=g_twins(ii).g*[1 0 0]';
y=g_twins(ii).g*[0 1 0]';
z=g_twins(ii).g*[0 0 1]';
plot3([0 x(1)], [0 x(2)], [0 x(3)], 'r')
plot3([0 y(1)], [0 y(2)], [0 y(3)], 'g')
plot3([0 z(1)], [0 z(2)], [0 z(3)], 'b')
set(gca, 'xlim', [-1 1])
set(gca, 'ylim', [-1 1])
set(gca, 'zlim', [-1 1])
end
end
end % end of function