public void TestStaticFn_Hermite_iii ()
{
var a = new Vector3( -100, +50, +100 );
var b = new Vector3( +100, -50, -100 );
var c = new Vector3( -10, +5, +10 );
var d = new Vector3( +10, -5, -10 );
Vector3 an; Vector3.Normalise(ref c, out an);
Vector3 bn; Vector3.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;
Vector3 r0 = b;
Vector3 r1 = new Vector3( e, -f, -e );
Vector3 r2 = new Vector3( g, -h, -g );
Vector3 r3 = new Vector3( i, -j, -i );
Vector3 r4 = new Vector3( k, -l, -k );
Vector3 r5 = new Vector3( m, -n, -m );
Vector3 r6 = new Vector3( o, -p, -o );
Vector3 r7 = new Vector3( -q, r, q );
Vector3 r8 = c;
var knownResults = new List<Tuple<Double, Vector3>>
{
new Tuple<Double, Vector3>( a0, r0 ),
new Tuple<Double, Vector3>( a1, r1 ),
new Tuple<Double, Vector3>( a2, r2 ),
new Tuple<Double, Vector3>( a3, r3 ),
new Tuple<Double, Vector3>( a4, r4 ),
new Tuple<Double, Vector3>( a5, r5 ),
new Tuple<Double, Vector3>( a6, r6 ),
new Tuple<Double, Vector3>( a7, r7 ),
new Tuple<Double, Vector3>( a8, r8 ),
};
for (Int32 idx = 0; idx < knownResults.Count; ++idx)
{
Vector3 result;
Double 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);
}
}