ハミルトンの四減数。
Exemple #1
0
		/// <summary>
		/// 四元数を使って3次元空間上の回転。
		/// p × x × ~q を計算する(~p は p の共役)。
		/// </summary>
		/// <param name="p">p</param>
		/// <param name="x">x</param>
		/// <returns>p × x × ~q</returns>
		public static Quaternion Rotate(Quaternion p, Quaternion x)
		{
			return new Quaternion(x.a, Rotate(p, x.u));
		}
Exemple #2
0
		/// <summary>
		/// 四元数を使って3次元空間上の回転。
		/// p × (0, x) × ~p を計算する(~p は p の共役)。
		/// </summary>
		/// <param name="p">回転軸/角を表す四元数</param>
		/// <param name="x">回転させたい点のベクトル</param>
		/// <returns>回転後の点のベクトル</returns>
		public static Vector Rotate(Quaternion p, Vector x)
		{
			Vector y = (p.a * p.a - p.u.Norm) * x;
			y += 2 * (Vector.InnerProduct(p.u, x) * p.u + p.a * Vector.OuterProduct(p.u, x));
			return y;
		}