Skip to content

Commit bbb4fd9

Browse files
committed
正規化を追加
1 parent 1df8629 commit bbb4fd9

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed

quaternion.h

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,18 @@ namespace qtnion{
6060
ret.k = one * rhs.k + i * rhs.j - j * rhs.i + k * rhs.one;
6161
return ret;
6262
}
63+
/**
64+
* @brief 四元数の実数による除算
65+
* @param rhs 除数
66+
*/
67+
quaternion operator/(const T rhs) const {
68+
quaternion ret;
69+
ret.one = one/rhs;
70+
ret.i = i/rhs;
71+
ret.j = j/rhs;
72+
ret.k = k/rhs;
73+
return ret;
74+
}
6375
};
6476
/**
6577
* @brief 四元数に対する共役
@@ -86,21 +98,19 @@ namespace qtnion{
8698
* @return 引数の逆数
8799
*/
88100
template <typename T>
89-
quaternion<T> inverse(quaternion<T> val) {
90-
quaternion<T> buf=conjugate(val);
91-
const T ARG_NORM=squ_norm(val);
92-
buf.one/=ARG_NORM;
93-
buf.i/=ARG_NORM;
94-
buf.j/=ARG_NORM;
95-
buf.k/=ARG_NORM;
96-
return buf;
97-
}
101+
quaternion<T> inverse(quaternion<T> val) {return conjugate(val)/squ_norm(val);}
98102
/**
99103
* @brief 四元数に対するノルムを計算
100104
* @return 自身のノルム
101105
* @remark 二乗を求めたい場合、squ_normの方がよいと思われます。
102106
* @see squ_norm()
103107
*/
104108
template <typename T>
105-
T norm(const quaternion<T> arg){return sqrt(arg.squ_norm());}
109+
T norm(const quaternion<T> arg){return sqrt(squ_norm(arg));}
110+
/**
111+
* @brief 四元数の標準化をする
112+
* @return もともとの値/それのノルム
113+
*/
114+
template <typename T>
115+
quaternion<T> normalize(quaternion<T> val) {return val/norm(val);}
106116
}

0 commit comments

Comments
 (0)