72 assert(
real().isUnit() );
80 assert(
real().isUnit() );
89 _frame_of_reference(underlying_representation)
286 return *
this /
norm();
323 bool isNaN()
const {
return _frame_of_reference.real.isNaN() || _frame_of_reference.dual.isNaN(); }
324 bool isInf()
const {
return _frame_of_reference.real.isInf() || _frame_of_reference.dual.isInf(); }
363 T tolerance = T{0.0002})
366 return approximately_equal_to( value_to_test._frame_of_reference, value_it_should_be._frame_of_reference, tolerance );
445 dual_scalar.
conjugate())._frame_of_reference /
446 dualscalar_normsquared(dual_scalar) );
468 template <std::
floating_po
int OT =
float>
471 OT tolerance = OT{0.0002})
475 auto diff{ near_to - input };
477 std::cout << std::format(
"input: {} is not equal to near_to: {} within tolerance: {}. Difference is {} .",
496 template <std::
floating_po
int OT =
float>
499 OT tolerance = OT{0.0002})
503 auto diff{ near_to - input };
505 std::cout << std::format(
"input: {} is equal to near_to: {} within tolerance: {}. Difference is {} .",
535 template <std::
floating_po
int OT =
float>
538 OT tolerance = OT{0.0002})
551 template <std::
floating_po
int OT =
float>
554 OT tolerance = OT{0.0002})
566 template <std::
floating_po
int OT =
float>
597 template <std::
floating_po
int OT =
float>
602 auto blended = beginning + (end - beginning) * percentage;
618 return std::format(
"[real: {}, dual: {}]", input.
real(), input.
dual());
constexpr bool rotation_magnitude_is_one() const
friend constexpr BasicDualQuaternion< T > conjugate(const BasicDualQuaternion< T > &input)
static constexpr BasicDualQuaternion< T > zero()
friend constexpr bool operator==(const BasicDualQuaternion< T > &left, const BasicDualQuaternion< T > &right)
friend constexpr BasicDualQuaternion< T > blend(const BasicDualQuaternion< T > &beginning, const BasicDualQuaternion< T > &end, OT percentage)
constexpr BasicDualQuaternion(const BasicQuaternion< T > &rotation, T translation_x, T translation_y, T translation_z)
friend constexpr BasicDualQuaternion< T > normalized(const BasicDualQuaternion< T > &input)
static constexpr BasicDualQuaternion< T > make_translation(const BasicVector3D< T > &translation)
constexpr BasicDual< T > norm() const
constexpr BasicDual< T > magnitude() const
constexpr BasicDualQuaternion(const BasicQuaternion< T > &rotation, const BasicQuaternion< T > &translation)
friend std::string format(const BasicDualQuaternion< T > &input)
static constexpr BasicDualQuaternion< T > identity()
static constexpr BasicDualQuaternion< T > encode_point(const BasicVector3D< T > &point)
constexpr BasicDual< T > normsquared() const
static constexpr BasicVector3D< T > decode_point(const BasicDualQuaternion< T > &encoded_point)
static constexpr BasicDualQuaternion< T > make_coordinate_system(const BasicQuaternion< T > &rotation, T translation_x, T translation_y, T translation_z)
const BasicQuaternion< T > & rotation() const
constexpr BasicDualQuaternion< T > normalized() const
BasicVector3D< T > translation() const
friend constexpr bool approximately_equal_to(const BasicDualQuaternion< T > &value_to_test, const BasicDualQuaternion< T > &value_it_should_be, T tolerance=T{0.0002})
constexpr BasicDualQuaternion(const BasicDual< BasicQuaternion< T > > &underlying_representation)
static constexpr BasicDualQuaternion< T > make_translation(T translation_x, T translation_y, T translation_z)
constexpr bool rotation_and_translation_are_orthogonal() const
const BasicQuaternion< T > & real() const
constexpr BasicDualQuaternion< T > conjugate() const
constexpr BasicDualQuaternion(const BasicQuaternion< T > &rotation, const BasicVector3D< T > &translation)
BasicDualQuaternion()=default
constexpr bool is_unit() const
const BasicQuaternion< T > & dual() const
T value_type
The underlying implementation type.
static constexpr BasicDualQuaternion< T > make_rotation(const BasicQuaternion< T > &rotation)
constexpr BasicDual< T > conjugate() const
static constexpr BasicQuaternion< T > encode_point(T x, T y, T z)
static constexpr BasicQuaternion< T > identity()
BasicQuaternion representation of the real number 1.
static constexpr BasicQuaternion< T > zero()
BasicQuaternion representation of the real number 0.
friend void CHECK_IF_ZERO(const BasicDualQuaternion< T > &input, OT tolerance=OT{0.0002})
friend void CHECK_IF_EQUAL(const BasicDualQuaternion< T > &input, const BasicDualQuaternion< T > &near_to, OT tolerance=OT{0.0002})
friend void CHECK_IF_NOT_EQUAL(const BasicDualQuaternion< T > &input, const BasicDualQuaternion< T > &near_to, OT tolerance=OT{0.0002})
friend bool check_if_not_equal(const BasicDualQuaternion< T > &input, const BasicDualQuaternion< T > &near_to, OT tolerance=OT{0.0002})
friend bool check_if_equal(const BasicDualQuaternion< T > &input, const BasicDualQuaternion< T > &near_to, OT tolerance=OT{0.0002})
friend constexpr BasicDualQuaternion< T > operator+(const BasicDualQuaternion< T > &left_side, const BasicDualQuaternion< T > &right_side)
friend constexpr BasicDualQuaternion< T > operator/(const BasicDualQuaternion< T > &dual_quaternion, const BasicDual< T > &dual_scalar)
friend constexpr BasicDualQuaternion< T > operator*(T scalar, const BasicDualQuaternion< T > &dual_quaternion)