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