37 : m_prim_lattice(), m_q1(q1), m_q2(q2), m_ind1{index1}, m_ind2{index2}
40 throw std::runtime_error(
"MillerIndexOrientation constructor: "
41 "invalid alignment parameters");
63 auto dir_2_parallel = dir_2.
project(dir_1);
64 dir_2 = (dir_2 - dir_2_parallel).unit();
67 Eigen::Matrix3d rot_matrix;
89 return (index.
h != 0.0 || index.
k != 0.0 || index.
l != 0.0);
94 if (index2.
h != 0.0) {
95 ratio = index1.
h / index2.
h;
96 }
else if (index2.
k != 0.0) {
97 ratio = index1.
k / index2.
k;
98 }
else if (index2.
l != 0.0) {
99 ratio = index1.
l / index2.
l;
103 return (index1.
h == ratio * index2.
h && index1.
k == ratio * index2.
k
104 && index1.
l == ratio * index2.
l);
127 for (
int j = 0; j < 3; ++j)
Defines interface ILatticeOrientation and subclasses.
BasicVector3D< T > project(const BasicVector3D< T > &v) const
Returns projection of this onto other vector: (this*v)*v/|v|^2.
virtual ~ILatticeOrientation()
A lattice with three basis vectors.
void resetBasis(const kvector_t a1, const kvector_t a2, const kvector_t a3)
Resets the basis vectors.
kvector_t getMillerDirection(double h, double k, double l) const
Returns normalized direction corresponding to the given Miller indices.
kvector_t getBasisVectorB() const
Returns basis vector b.
kvector_t getBasisVectorC() const
Returns basis vector c.
kvector_t getBasisVectorA() const
Returns basis vector a.
Specifies a rotation of a lattice through the Miller indices of two coordinate axes.
Transform3D transformationMatrix() const override
~MillerIndexOrientation() override
void usePrimitiveLattice(const Lattice &lattice) override
bool checkAlignment() const
MillerIndexOrientation(QComponent q1, MillerIndex index1, QComponent q2, MillerIndex index2)
This constructor is best explained by an example.
MillerIndexOrientation * clone() const override
MillerIndexOrientation::QComponent ThirdQComponent(MillerIndexOrientation::QComponent q1, MillerIndexOrientation::QComponent q2)
bool ParallelMillerIndices(MillerIndex index1, MillerIndex index2)
double SignForCrossProduct(MillerIndexOrientation::QComponent q1, MillerIndexOrientation::QComponent q2)
bool ValidMillerIndex(MillerIndex index)
void FillVectorInRow(Eigen::Matrix3d &matrix, kvector_t vec, MillerIndexOrientation::QComponent row)
A direction in reciprocal space, specified by double-valued indices hkl.
MillerIndex(double h_, double k_, double l_)