public void CatmullromTests() { Vector4 expected; Vector4 d = new Vector4(12.2352f, -1.23525f, 3.1234f, 51.3415f); expected = new Vector4(402160.9f, -1056407f, -353251.4f, 374571.3f); Assert.IsTrue(TestHelper.ApproximatelyEquals(expected, Vector4.CatmullRom(a, b, c, d, 13.125123f)), "#1"); expected = new Vector4(-551.6433f, 1464.028f, 505.8189f, -674.8631f); Assert.IsTrue(TestHelper.ApproximatelyEquals(expected, Vector4.CatmullRom(b, d, c, a, -1.125123f)), "#1"); }
public void Vector4_CatmullRomCalculatedCorrectly() { var vector1 = new Vector4(-123, -234, 100, 111); var vector2 = new Vector4(234, -345, 200, 222); var vector3 = new Vector4(456, 789, 300, 333); var vector4 = new Vector4(-456, 986, 400, 444); var result = Vector4.CatmullRom(vector1, vector2, vector3, vector4, 0.55f); TheResultingValue(result).WithinDelta(0.1f) .ShouldBe(440.8f, 273.1f, 255.0f, 283.05f); }
public static void CatmullRomRef(int times) { var value1 = new Vector4(0f, 2f, 4f, 6f); var value2 = new Vector4(1f, 3f, 5f, 7f); var value3 = new Vector4(3f, 5f, 7f, 9f); var value4 = new Vector4(6f, 8f, 10f, 12f); float amount = 0.6f; Vector4 result; for (int i = 0; i < times; i++) { Vector4.CatmullRom(ref value1, ref value2, ref value3, ref value4, amount, out result); } }
public static Quaternion CatmullRom(Quaternion q0, Quaternion q1, Quaternion q2, Quaternion q3, float t) { Vector4 vector4 = Vector4.CatmullRom(new Vector4(q0.X, q0.Y, q0.Z, q0.W), new Vector4(q1.X, q1.Y, q1.Z, q1.W), new Vector4(q2.X, q2.Y, q2.Z, q2.W), new Vector4(q3.X, q3.Y, q3.Z, q3.W), t); return(Quaternion.Normalize(new Quaternion(vector4.X, vector4.Y, vector4.Z, vector4.W))); }