public void TestStaticFn_CatmullRom_ii ()
{
var a = new Vector3( -90, +30, +90 );
var b = new Vector3( -30, -30, +30 );
var c = new Vector3( +30, +30, -30 );
var d = new Vector3( +90, -30, -90 );
Single one = 1;
Single u = 15;
Single v = (Single) 165 / (Single) 8; // 20.5
Single w = (Single) 45 / (Single) 2; // 20.625
Single x = (Single) 1755 / (Single) 64; // 27.421875
Single y = (Single) 15 / (Single) 2; // 14.5
Single z = (Single) 705 / (Single) 64; // 11.015625
Single a0 = 0;
Single a1 = (one * 1) / 8;
Single a2 = (one * 2) / 8;
Single a3 = (one * 3) / 8;
Single a4 = (one * 4) / 8;
Single a5 = (one * 5) / 8;
Single a6 = (one * 6) / 8;
Single a7 = (one * 7) / 8;
Single a8 = 1;
Vector3 r0 = b;
Vector3 r1 = new Vector3( -w, -x, w );
Vector3 r2 = new Vector3( -u, -v, u );
Vector3 r3 = new Vector3( -y, -z, y );
Vector3 r4 = Vector3.Zero;
Vector3 r5 = new Vector3( y, z, -y );
Vector3 r6 = new Vector3( u, v, -u );
Vector3 r7 = new Vector3( w, x, -w );
Vector3 r8 = c;
var knownResults = new List<Tuple<Single, Vector3>>
{
new Tuple<Single, Vector3>( a0, r0 ),
new Tuple<Single, Vector3>( a1, r1 ),
new Tuple<Single, Vector3>( a2, r2 ),
new Tuple<Single, Vector3>( a3, r3 ),
new Tuple<Single, Vector3>( a4, r4 ),
new Tuple<Single, Vector3>( a5, r5 ),
new Tuple<Single, Vector3>( a6, r6 ),
new Tuple<Single, Vector3>( a7, r7 ),
new Tuple<Single, Vector3>( a8, r8 ),
};
for (Int32 idx = 0; idx < knownResults.Count; ++idx)
{
Vector3 result;
Single amount = knownResults[idx].Item1;
Vector3 expected = knownResults[idx].Item2;
Vector3.CatmullRom (
ref a, ref b, ref c, ref d, ref amount, out result);
AssertEqualWithinReason(result, expected);
}
}