📄 quaternion.hpp
字号:
protected:
BOOST_QUATERNION_MEMBER_DATA_GENERATOR(double)
private:
};
template<>
class quaternion<long double>
{
public:
typedef long double value_type;
BOOST_QUATERNION_CONSTRUCTOR_GENERATOR(long double)
// UNtemplated copy constructor
// (this is taken care of by the compiler itself)
// converting copy constructors
explicit quaternion(quaternion<float> const & a_recopier)
{
*this = detail::quaternion_type_converter<long double, float>(a_recopier);
}
explicit quaternion(quaternion<double> const & a_recopier)
{
*this = detail::quaternion_type_converter<long double, double>(a_recopier);
}
// destructor
// (this is taken care of by the compiler itself)
// accessors
//
// Note: Like complex number, quaternions do have a meaningful notion of "real part",
// but unlike them there is no meaningful notion of "imaginary part".
// Instead there is an "unreal part" which itself is a quaternion, and usually
// nothing simpler (as opposed to the complex number case).
// However, for practicallity, there are accessors for the other components
// (these are necessary for the templated copy constructor, for instance).
BOOST_QUATERNION_ACCESSOR_GENERATOR(long double)
// assignment operators
BOOST_QUATERNION_MEMBER_ASSIGNMENT_GENERATOR(long double)
// other assignment-related operators
//
// NOTE: Quaternion multiplication is *NOT* commutative;
// symbolically, "q *= rhs;" means "q = q * rhs;"
// and "q /= rhs;" means "q = q * inverse_of(rhs);"
BOOST_QUATERNION_MEMBER_ALGEBRAIC_GENERATOR(long double)
protected:
BOOST_QUATERNION_MEMBER_DATA_GENERATOR(long double)
private:
};
#undef BOOST_QUATERNION_MEMBER_ALGEBRAIC_GENERATOR
#undef BOOST_QUATERNION_MEMBER_ADD_GENERATOR
#undef BOOST_QUATERNION_MEMBER_SUB_GENERATOR
#undef BOOST_QUATERNION_MEMBER_MUL_GENERATOR
#undef BOOST_QUATERNION_MEMBER_DIV_GENERATOR
#undef BOOST_QUATERNION_MEMBER_ADD_GENERATOR_1
#undef BOOST_QUATERNION_MEMBER_ADD_GENERATOR_2
#undef BOOST_QUATERNION_MEMBER_ADD_GENERATOR_3
#undef BOOST_QUATERNION_MEMBER_SUB_GENERATOR_1
#undef BOOST_QUATERNION_MEMBER_SUB_GENERATOR_2
#undef BOOST_QUATERNION_MEMBER_SUB_GENERATOR_3
#undef BOOST_QUATERNION_MEMBER_MUL_GENERATOR_1
#undef BOOST_QUATERNION_MEMBER_MUL_GENERATOR_2
#undef BOOST_QUATERNION_MEMBER_MUL_GENERATOR_3
#undef BOOST_QUATERNION_MEMBER_DIV_GENERATOR_1
#undef BOOST_QUATERNION_MEMBER_DIV_GENERATOR_2
#undef BOOST_QUATERNION_MEMBER_DIV_GENERATOR_3
#undef BOOST_QUATERNION_CONSTRUCTOR_GENERATOR
#undef BOOST_QUATERNION_MEMBER_ASSIGNMENT_GENERATOR
#undef BOOST_QUATERNION_MEMBER_DATA_GENERATOR
#undef BOOST_QUATERNION_ACCESSOR_GENERATOR
// operators
#define BOOST_QUATERNION_OPERATOR_GENERATOR_BODY(op) \
{ \
quaternion<T> res(lhs); \
res op##= rhs; \
return(res); \
}
#define BOOST_QUATERNION_OPERATOR_GENERATOR_1_L(op) \
template<typename T> \
inline quaternion<T> operator op (T const & lhs, quaternion<T> const & rhs) \
BOOST_QUATERNION_OPERATOR_GENERATOR_BODY(op)
#define BOOST_QUATERNION_OPERATOR_GENERATOR_1_R(op) \
template<typename T> \
inline quaternion<T> operator op (quaternion<T> const & lhs, T const & rhs) \
BOOST_QUATERNION_OPERATOR_GENERATOR_BODY(op)
#define BOOST_QUATERNION_OPERATOR_GENERATOR_2_L(op) \
template<typename T> \
inline quaternion<T> operator op (::std::complex<T> const & lhs, quaternion<T> const & rhs) \
BOOST_QUATERNION_OPERATOR_GENERATOR_BODY(op)
#define BOOST_QUATERNION_OPERATOR_GENERATOR_2_R(op) \
template<typename T> \
inline quaternion<T> operator op (quaternion<T> const & lhs, ::std::complex<T> const & rhs) \
BOOST_QUATERNION_OPERATOR_GENERATOR_BODY(op)
#define BOOST_QUATERNION_OPERATOR_GENERATOR_3(op) \
template<typename T> \
inline quaternion<T> operator op (quaternion<T> const & lhs, quaternion<T> const & rhs) \
BOOST_QUATERNION_OPERATOR_GENERATOR_BODY(op)
#define BOOST_QUATERNION_OPERATOR_GENERATOR(op) \
BOOST_QUATERNION_OPERATOR_GENERATOR_1_L(op) \
BOOST_QUATERNION_OPERATOR_GENERATOR_1_R(op) \
BOOST_QUATERNION_OPERATOR_GENERATOR_2_L(op) \
BOOST_QUATERNION_OPERATOR_GENERATOR_2_R(op) \
BOOST_QUATERNION_OPERATOR_GENERATOR_3(op)
BOOST_QUATERNION_OPERATOR_GENERATOR(+)
BOOST_QUATERNION_OPERATOR_GENERATOR(-)
BOOST_QUATERNION_OPERATOR_GENERATOR(*)
BOOST_QUATERNION_OPERATOR_GENERATOR(/)
#undef BOOST_QUATERNION_OPERATOR_GENERATOR
#undef BOOST_QUATERNION_OPERATOR_GENERATOR_1_L
#undef BOOST_QUATERNION_OPERATOR_GENERATOR_1_R
#undef BOOST_QUATERNION_OPERATOR_GENERATOR_2_L
#undef BOOST_QUATERNION_OPERATOR_GENERATOR_2_R
#undef BOOST_QUATERNION_OPERATOR_GENERATOR_3
#undef BOOST_QUATERNION_OPERATOR_GENERATOR_BODY
template<typename T>
inline quaternion<T> operator + (quaternion<T> const & q)
{
return(q);
}
template<typename T>
inline quaternion<T> operator - (quaternion<T> const & q)
{
return(quaternion<T>(-q.R_component_1(),-q.R_component_2(),-q.R_component_3(),-q.R_component_4()));
}
template<typename T>
inline bool operator == (T const & lhs, quaternion<T> const & rhs)
{
return (
(rhs.R_component_1() == lhs)&&
(rhs.R_component_2() == static_cast<T>(0))&&
(rhs.R_component_3() == static_cast<T>(0))&&
(rhs.R_component_4() == static_cast<T>(0))
);
}
template<typename T>
inline bool operator == (quaternion<T> const & lhs, T const & rhs)
{
return (
(lhs.R_component_1() == rhs)&&
(lhs.R_component_2() == static_cast<T>(0))&&
(lhs.R_component_3() == static_cast<T>(0))&&
(lhs.R_component_4() == static_cast<T>(0))
);
}
template<typename T>
inline bool operator == (::std::complex<T> const & lhs, quaternion<T> const & rhs)
{
return (
(rhs.R_component_1() == lhs.real())&&
(rhs.R_component_2() == lhs.imag())&&
(rhs.R_component_3() == static_cast<T>(0))&&
(rhs.R_component_4() == static_cast<T>(0))
);
}
template<typename T>
inline bool operator == (quaternion<T> const & lhs, ::std::complex<T> const & rhs)
{
return (
(lhs.R_component_1() == rhs.real())&&
(lhs.R_component_2() == rhs.imag())&&
(lhs.R_component_3() == static_cast<T>(0))&&
(lhs.R_component_4() == static_cast<T>(0))
);
}
template<typename T>
inline bool operator == (quaternion<T> const & lhs, quaternion<T> const & rhs)
{
return (
(rhs.R_component_1() == lhs.R_component_1())&&
(rhs.R_component_2() == lhs.R_component_2())&&
(rhs.R_component_3() == lhs.R_component_3())&&
(rhs.R_component_4() == lhs.R_component_4())
);
}
#define BOOST_QUATERNION_NOT_EQUAL_GENERATOR \
{ \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -