📄 octonion.hpp
字号:
return(*this); } octonion<T> & operator *= (T const & rhs) { T at = a * rhs; // exception guard T bt = b * rhs; // exception guard T ct = c * rhs; // exception guard T dt = d * rhs; // exception guard T et = e * rhs; // exception guard T ft = f * rhs; // exception guard T gt = g * rhs; // exception guard T ht = h * rhs; // exception guard a = at; b = bt; c = ct; d = dt; e = et; f = ft; g = gt; h = ht; return(*this); } octonion<T> & operator *= (::std::complex<T> const & rhs) { T ar = rhs.real(); T br = rhs.imag(); T at = +a*ar-b*br; T bt = +a*br+b*ar; T ct = +c*ar+d*br; T dt = -c*br+d*ar; T et = +e*ar+f*br; T ft = -e*br+f*ar; T gt = +g*ar-h*br; T ht = +g*br+h*ar; a = at; b = bt; c = ct; d = dt; e = et; f = ft; g = gt; h = ht; return(*this); } octonion<T> & operator *= (::boost::math::quaternion<T> const & rhs) { T ar = rhs.R_component_1(); T br = rhs.R_component_2(); T cr = rhs.R_component_2(); T dr = rhs.R_component_2(); T at = +a*ar-b*br-c*cr-d*dr; T bt = +a*br+b*ar+c*dr-d*cr; T ct = +a*cr-b*dr+c*ar+d*br; T dt = +a*dr+b*cr-c*br+d*ar; T et = +e*ar+f*br+g*cr+h*dr; T ft = -e*br+f*ar-g*dr+h*cr; T gt = -e*cr+f*dr+g*ar-h*br; T ht = -e*dr-f*cr+g*br+h*ar; a = at; b = bt; c = ct; d = dt; e = et; f = ft; g = gt; h = ht; return(*this); } template<typename X> octonion<T> & operator *= (octonion<X> const & rhs) { T ar = static_cast<T>(rhs.R_component_1()); T br = static_cast<T>(rhs.R_component_2()); T cr = static_cast<T>(rhs.R_component_3()); T dr = static_cast<T>(rhs.R_component_4()); T er = static_cast<T>(rhs.R_component_5()); T fr = static_cast<T>(rhs.R_component_6()); T gr = static_cast<T>(rhs.R_component_7()); T hr = static_cast<T>(rhs.R_component_8()); T at = +a*ar-b*br-c*cr-d*dr-e*er-f*fr-g*gr-h*hr; T bt = +a*br+b*ar+c*dr-d*cr+e*fr-f*er-g*hr+h*gr; T ct = +a*cr-b*dr+c*ar+d*br+e*gr+f*hr-g*er-h*fr; T dt = +a*dr+b*cr-c*br+d*ar+e*hr-f*gr+g*fr-h*er; T et = +a*er-b*fr-c*gr-d*hr+e*ar+f*br+g*cr+h*dr; T ft = +a*fr+b*er-c*hr+d*gr-e*br+f*ar-g*dr+h*cr; T gt = +a*gr+b*hr+c*er-d*fr-e*cr+f*dr+g*ar-h*br; T ht = +a*hr-b*gr+c*fr+d*er-e*dr-f*cr+g*br+h*ar; a = at; b = bt; c = ct; d = dt; e = et; f = ft; g = gt; h = ht; return(*this); } octonion<T> & operator /= (T const & rhs) { T at = a / rhs; // exception guard T bt = b / rhs; // exception guard T ct = c / rhs; // exception guard T dt = d / rhs; // exception guard T et = e / rhs; // exception guard T ft = f / rhs; // exception guard T gt = g / rhs; // exception guard T ht = h / rhs; // exception guard a = at; b = bt; c = ct; d = dt; e = et; f = ft; g = gt; h = ht; return(*this); } octonion<T> & operator /= (::std::complex<T> const & rhs) { T ar = rhs.real(); T br = rhs.imag(); T denominator = ar*ar+br*br; T at = (+a*ar-b*br)/denominator; T bt = (-a*br+b*ar)/denominator; T ct = (+c*ar-d*br)/denominator; T dt = (+c*br+d*ar)/denominator; T et = (+e*ar-f*br)/denominator; T ft = (+e*br+f*ar)/denominator; T gt = (+g*ar+h*br)/denominator; T ht = (+g*br+h*ar)/denominator; a = at; b = bt; c = ct; d = dt; e = et; f = ft; g = gt; h = ht; return(*this); } octonion<T> & operator /= (::boost::math::quaternion<T> const & rhs) { T ar = rhs.R_component_1(); T br = rhs.R_component_2(); T cr = rhs.R_component_2(); T dr = rhs.R_component_2(); T denominator = ar*ar+br*br+cr*cr+dr*dr; T at = (+a*ar+b*br+c*cr+d*dr)/denominator; T bt = (-a*br+b*ar-c*dr+d*cr)/denominator; T ct = (-a*cr+b*dr+c*ar-d*br)/denominator; T dt = (-a*dr-b*cr+c*br+d*ar)/denominator; T et = (+e*ar-f*br-g*cr-h*dr)/denominator; T ft = (+e*br+f*ar+g*dr-h*cr)/denominator; T gt = (+e*cr-f*dr+g*ar+h*br)/denominator; T ht = (+e*dr+f*cr-g*br+h*ar)/denominator; a = at; b = bt; c = ct; d = dt; e = et; f = ft; g = gt; h = ht; return(*this); } template<typename X> octonion<T> & operator /= (octonion<X> const & rhs) { T ar = static_cast<T>(rhs.R_component_1()); T br = static_cast<T>(rhs.R_component_2()); T cr = static_cast<T>(rhs.R_component_3()); T dr = static_cast<T>(rhs.R_component_4()); T er = static_cast<T>(rhs.R_component_5()); T fr = static_cast<T>(rhs.R_component_6()); T gr = static_cast<T>(rhs.R_component_7()); T hr = static_cast<T>(rhs.R_component_8()); T denominator = ar*ar+br*br+cr*cr+dr*dr+er*er+fr*fr+gr*gr+hr*hr;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -