📄 octonion.hpp
字号:
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 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());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -