113 components_{ 0., 0., 0., 0. }
178 return 2. * std::acos(
s());
243 return axis.normalize();
254 return { -
i(), -
j(), -
k(),
s() };
265 return components_[0];
299 return components_[1];
310 return components_[2];
346 { return oneMinus * component1 + inPercent * component2; });
372 return std::asin(2 * (
s() *
j() -
k() *
i()));
456 return components_[3];
508 const double s0 = std::cos(theta) -
510 const double s1 = std::sin(theta) / std::sin(
theta0);
553 const double q0 =
i();
554 const double q1 =
j();
555 const double q2 =
k();
556 const double q3 =
s();
674 return !(*
this ==
inRhs);
688 inRhs.components_.begin(),
690 std::plus<double>());
720 inRhs.components_.begin(),
722 std::minus<double>());
844 if (
inVec.size() != 3)
915 std::array<double, 4> components_{ { 0., 0., 0., 1. } };
924 std::for_each(components_.begin(),
927 { sumOfSquares += utils::sqr(component); });
943 void eulerToQuat(
double roll,
double pitch,
double yaw)
noexcept
977 void dcmToQuat(
const NdArray<double>&
dcm)
985 NdArray<double>
checks(1, 4);
997 components_[3] = 0.5 * std::sqrt(1 +
dcm(0, 0) +
dcm(1, 1) +
dcm(2, 2));
998 components_[0] = (
dcm(2, 1) -
dcm(1, 2)) / (4 * components_[3]);
999 components_[1] = (
dcm(0, 2) -
dcm(2, 0)) / (4 * components_[3]);
1000 components_[2] = (
dcm(1, 0) -
dcm(0, 1)) / (4 * components_[3]);
1006 components_[0] = 0.5 * std::sqrt(1 +
dcm(0, 0) -
dcm(1, 1) -
dcm(2, 2));
1007 components_[1] = (
dcm(1, 0) +
dcm(0, 1)) / (4 * components_[0]);
1008 components_[2] = (
dcm(2, 0) +
dcm(0, 2)) / (4 * components_[0]);
1009 components_[3] = (
dcm(2, 1) -
dcm(1, 2)) / (4 * components_[0]);
1015 components_[1] = 0.5 * std::sqrt(1 -
dcm(0, 0) +
dcm(1, 1) -
dcm(2, 2));
1016 components_[0] = (
dcm(1, 0) +
dcm(0, 1)) / (4 * components_[1]);
1017 components_[2] = (
dcm(2, 1) +
dcm(1, 2)) / (4 * components_[1]);
1018 components_[3] = (
dcm(0, 2) -
dcm(2, 0)) / (4 * components_[1]);
1024 components_[2] = 0.5 * std::sqrt(1 -
dcm(0, 0) -
dcm(1, 1) +
dcm(2, 2));
1025 components_[0] = (
dcm(2, 0) +
dcm(0, 2)) / (4 * components_[2]);
1026 components_[1] = (
dcm(2, 1) +
dcm(1, 2)) / (4 * components_[2]);
1027 components_[3] = (
dcm(1, 0) -
dcm(0, 1)) / (4 * components_[2]);
#define THROW_INVALID_ARGUMENT_ERROR(msg)
Definition Error.hpp:37
Holds 1D and 2D arrays, the main work horse of the NumCpp library.
Definition NdArrayCore.hpp:139
self_type transpose() const
Definition NdArrayCore.hpp:4958
self_type dot(const self_type &inOtherArray) const
Definition NdArrayCore.hpp:2795
value_type item() const
Definition NdArrayCore.hpp:3098
A Class for slicing into NdArrays.
Definition Slice.hpp:45
Holds a 3D vector.
Definition Vec3.hpp:51
Vec3 normalize() const noexcept
Definition Vec3.hpp:289
NdArray< double > toNdArray() const
Definition Vec3.hpp:337
Holds a unit quaternion.
Definition Quaternion.hpp:56
double s() const noexcept
Definition Quaternion.hpp:454
std::string str() const
Definition Quaternion.hpp:535
double angleOfRotation() const noexcept
Definition Quaternion.hpp:176
friend std::ostream & operator<<(std::ostream &inOStream, const Quaternion &inQuat)
Definition Quaternion.hpp:907
double roll() const noexcept
Definition Quaternion.hpp:402
static Quaternion xRotation(double inAngle) noexcept
Definition Quaternion.hpp:595
static Quaternion nlerp(const Quaternion &inQuat1, const Quaternion &inQuat2, double inPercent)
Definition Quaternion.hpp:322
static Quaternion rollRotation(double inAngle) noexcept
Definition Quaternion.hpp:414
Vec3 rotate(const Vec3 &inVec3) const
Definition Quaternion.hpp:443
Quaternion(double inI, double inJ, double inK, double inS) noexcept
Definition Quaternion.hpp:86
NdArray< double > angularVelocity(const Quaternion &inQuat2, double inTime) const
Definition Quaternion.hpp:225
Quaternion operator-() const noexcept
Definition Quaternion.hpp:747
NdArray< double > operator*(const NdArray< double > &inVec) const
Definition Quaternion.hpp:842
Quaternion(const std::array< double, 4 > &components) noexcept
Definition Quaternion.hpp:98
Quaternion operator+(const Quaternion &inRhs) const noexcept
Definition Quaternion.hpp:704
double i() const noexcept
Definition Quaternion.hpp:263
double yaw() const noexcept
Definition Quaternion.hpp:607
double pitch() const noexcept
Definition Quaternion.hpp:370
Quaternion slerp(const Quaternion &inQuat2, double inPercent) const
Definition Quaternion.hpp:524
NdArray< double > toNdArray() const
Definition Quaternion.hpp:582
Quaternion & operator/=(const Quaternion &inRhs) noexcept
Definition Quaternion.hpp:882
static Quaternion slerp(const Quaternion &inQuat1, const Quaternion &inQuat2, double inPercent)
Definition Quaternion.hpp:468
static Quaternion yawRotation(double inAngle) noexcept
Definition Quaternion.hpp:619
void print() const
Definition Quaternion.hpp:391
Quaternion(const NdArray< double > &inAxis, double inAngle)
Definition Quaternion.hpp:165
bool operator==(const Quaternion &inRhs) const noexcept
Definition Quaternion.hpp:657
NdArray< double > rotate(const NdArray< double > &inVector) const
Definition Quaternion.hpp:426
Quaternion(double roll, double pitch, double yaw) noexcept
Definition Quaternion.hpp:72
Vec3 operator*(const Vec3 &inVec3) const
Definition Quaternion.hpp:870
Quaternion inverse() const noexcept
Definition Quaternion.hpp:285
double k() const noexcept
Definition Quaternion.hpp:308
static Quaternion zRotation(double inAngle) noexcept
Definition Quaternion.hpp:644
NdArray< double > toDCM() const
Definition Quaternion.hpp:549
Quaternion operator/(const Quaternion &inRhs) const noexcept
Definition Quaternion.hpp:894
Quaternion nlerp(const Quaternion &inQuat2, double inPercent) const
Definition Quaternion.hpp:359
static Quaternion yRotation(double inAngle) noexcept
Definition Quaternion.hpp:631
Quaternion(const Vec3 &inAxis, double inAngle) noexcept
Definition Quaternion.hpp:144
Quaternion & operator*=(double inScalar) noexcept
Definition Quaternion.hpp:799
double j() const noexcept
Definition Quaternion.hpp:297
Quaternion & operator+=(const Quaternion &inRhs) noexcept
Definition Quaternion.hpp:684
Quaternion operator*(double inScalar) const noexcept
Definition Quaternion.hpp:830
Quaternion operator-(const Quaternion &inRhs) const noexcept
Definition Quaternion.hpp:736
Quaternion operator*(const Quaternion &inRhs) const noexcept
Definition Quaternion.hpp:817
bool operator!=(const Quaternion &inRhs) const noexcept
Definition Quaternion.hpp:672
Quaternion(const NdArray< double > &inArray)
Definition Quaternion.hpp:112
Quaternion conjugate() const noexcept
Definition Quaternion.hpp:252
static Quaternion identity() noexcept
Definition Quaternion.hpp:274
Vec3 axisOfRotation() const noexcept
Definition Quaternion.hpp:236
static NdArray< double > angularVelocity(const Quaternion &inQuat1, const Quaternion &inQuat2, double inTime)
Definition Quaternion.hpp:191
Quaternion & operator-=(const Quaternion &inRhs) noexcept
Definition Quaternion.hpp:716
Quaternion & operator*=(const Quaternion &inRhs) noexcept
Definition Quaternion.hpp:759
static Quaternion pitchRotation(double inAngle) noexcept
Definition Quaternion.hpp:382
OutputIt transform(InputIt first, InputIt last, OutputIt destination, UnaryOperation unaryFunction)
Definition StlAlgorithms.hpp:775
void for_each(InputIt first, InputIt last, UnaryFunction f)
Definition StlAlgorithms.hpp:225
bool equal(InputIt1 first1, InputIt1 last1, InputIt2 first2) noexcept
Definition StlAlgorithms.hpp:140
OutputIt copy(InputIt first, InputIt last, OutputIt destination) noexcept
Definition StlAlgorithms.hpp:97
std::string num2str(dtype inNumber)
Definition num2str.hpp:44
bool essentiallyEqual(dtype inValue1, dtype inValue2) noexcept
Definition essentiallyEqual.hpp:49
constexpr dtype sqr(dtype inValue) noexcept
Definition sqr.hpp:42
NdArray< double > norm(const NdArray< dtype > &inArray, Axis inAxis=Axis::NONE)
Definition norm.hpp:51
dtype clip(dtype inValue, dtype inMinValue, dtype inMaxValue)
Definition clip.hpp:50
NdArray< dtype > arange(dtype inStart, dtype inStop, dtype inStep=1)
Definition arange.hpp:59
NdArray< uint32 > argmax(const NdArray< dtype > &inArray, Axis inAxis=Axis::NONE)
Definition argmax.hpp:46
std::uint32_t uint32
Definition Types.hpp:40