public void powTest() { LDQuat quat = new LDQuat(); LDQuat actual = new LDQuat(); LDQuat expected = new LDQuat(); //ld_float delta = 0.00001f; ld_float exponent; // Input : quat1{x = 0.0, y = 0.0, z = 0.0, w = 1.0}, exponent = 0.0 (単位クォータニオン) quat.x = 0.0f; quat.y = 0.0f; quat.z = 0.0f; quat.w = 1.0f; exponent = 0.0f; expected.x = 0.0f; expected.y = 0.0f; expected.z = 0.0f; expected.w = 1.0f; actual = quat.pow(exponent); TestUtil.COMPARE(expected.x, actual.x); TestUtil.COMPARE(expected.y, actual.y); TestUtil.COMPARE(expected.z, actual.z); TestUtil.COMPARE(expected.w, actual.w); // Input : quat1{x = 0.1, y = 0.2, z = 0.3, w = 0.4}, exponent = 2.0 (任意の値) quat.x = 0.1f; quat.y = 0.2f; quat.z = 0.3f; quat.w = 0.4f; exponent = 2.0f; ld_float alpha = (float)Math.Acos(quat.w); ld_float newAlpha = alpha * exponent; ld_float mult = (float)Math.Sin(newAlpha) / (float)Math.Sin(alpha); expected.x = quat.x * mult; expected.y = quat.y * mult; expected.z = quat.z * mult; expected.w = (float)Math.Cos(newAlpha); actual = quat.pow(exponent); TestUtil.COMPARE(expected.x, actual.x); TestUtil.COMPARE(expected.y, actual.y); TestUtil.COMPARE(expected.z, actual.z); TestUtil.COMPARE(expected.w, actual.w); }