public void TestStaticFn_CatmullRom_ii ()
{
var a = new Vector4( -120, +40, +40, +120 );
var b = new Vector4( - 40, -40, -40, + 40 );
var c = new Vector4( + 40, +40, +40, - 40 );
var d = new Vector4( +120, -40, -40, -120 );
Single one = 1;
Single y = 30;
Single x = 20;
Single w = 10;
Single v = (Single) 585 / (Single) 16; // 36.5625
Single u = (Single) 55 / (Single) 2; // 27.5
Single t = (Single) 235 / (Single) 16; // 14.6875
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;
Vector4 r0 = b;
Vector4 r1 = new Vector4( -y, -v, -v, y );
Vector4 r2 = new Vector4( -x, -u, -u, x );
Vector4 r3 = new Vector4( -w, -t, -t, w );
Vector4 r4 = Vector4.Zero;
Vector4 r5 = new Vector4( w, t, t, -w );
Vector4 r6 = new Vector4( x, u, u, -x );
Vector4 r7 = new Vector4( y, v, v, -y );
Vector4 r8 = c;
var knownResults = new List<Tuple<Single, Vector4>>
{
new Tuple<Single, Vector4>( a0, r0 ),
new Tuple<Single, Vector4>( a1, r1 ),
new Tuple<Single, Vector4>( a2, r2 ),
new Tuple<Single, Vector4>( a3, r3 ),
new Tuple<Single, Vector4>( a4, r4 ),
new Tuple<Single, Vector4>( a5, r5 ),
new Tuple<Single, Vector4>( a6, r6 ),
new Tuple<Single, Vector4>( a7, r7 ),
new Tuple<Single, Vector4>( a8, r8 ),
};
for (Int32 idx = 0; idx < knownResults.Count; ++idx)
{
Vector4 result;
Single amount = knownResults[idx].Item1;
Vector4 expected = knownResults[idx].Item2;
Vector4.CatmullRom (
ref a, ref b, ref c, ref d, ref amount, out result);
AssertEqualWithinReason(result, expected);
}
}