public static void MulUnsafe(Rot q, Rot r, Rot result) { Debug.Assert(r != result); Debug.Assert(q != result); // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc] // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc] // s = qs * rc + qc * rs // c = qc * rc - qs * rs result.Sin = q.Sin * r.Cos + q.Cos * r.Sin; result.Cos = q.Cos * r.Cos - q.Sin * r.Sin; }
public static void MulToOutUnsafe(Transform A, Transform B, Transform result) { Debug.Assert(result != B); Debug.Assert(result != A); Rot.MulUnsafe(A.Q, B.Q, result.Q); Rot.MulToOutUnsafe(A.Q, B.P, result.P); result.P.AddLocal(A.P); }