public void TestStaticFn_Hermite_iii ()
{
var a = new Vector2( -100, +50 );
var b = new Vector2( +100, -50 );
var c = new Vector2( -10, +5 );
var d = new Vector2( +10, -5 );
Vector2 an; Vector2.Normalise(ref c, out an);
Vector2 bn; Vector2.Normalise(ref d, out bn);
Double one = 1;
// 100.1953125
Double e = (Double) 51300 / (Double) 512;
// 50.09765625
Double f = (Double) 12825 / (Double) 256;
// 91.25
Double g = (Double) 365 / (Double) 4;
// 45.625
Double h = (Double) 365 / (Double) 8;
// 75.7421875
Double i = (Double) 9695 / (Double) 128;
// 37.87109375
Double j = (Double) 9695 / (Double) 256;
// 56.25
Double k = (Double) 225 / (Double) 4;
// 28.125
Double l = (Double) 225 / (Double) 8;
// 35.3515625
Double m = (Double) 4525 / (Double) 128;
// 17.67578125
Double n = (Double) 4525 / (Double) 256;
// 15.625
Double o = (Double) 125 / (Double) 8;
// 7.8125
Double p = (Double) 125 / (Double) 16;
// 0.3515625
Double q = (Double) 45 / (Double) 128;
// 0.17578125
Double r = (Double) 45 / (Double) 256;
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( e, -f );
Vector2 r2 = new Vector2( g, -h );
Vector2 r3 = new Vector2( i, -j );
Vector2 r4 = new Vector2( k, -l );
Vector2 r5 = new Vector2( m, -n );
Vector2 r6 = new Vector2( o, -p );
Vector2 r7 = new Vector2( -q, r );
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);
}
}