Abacus.DoublePrecision.Vector4Tests.TestStaticFn_TransformNormal_i C# (CSharp) Method

TestStaticFn_TransformNormal_i() private method

private TestStaticFn_TransformNormal_i ( ) : void
return void
        public void TestStaticFn_TransformNormal_i ()
        {
            Double six = 6;
            Double eight = 8;
            Double ten = 10;
            Double pi; Maths.Pi (out pi);
            Double minusPi = -pi;
            Double piOver2 = pi / (Double) 2;
            Double oneOverRoot4; Maths.Half (out oneOverRoot4);
            Double sixTenths = six / ten;
            Double eightTenths = eight / ten;

            // todo: find a set of 3 fraction that make up a 4D unit vector
            //       for now just use the 2D one
            Vector4 v1 = new Vector4 (0, sixTenths, 0, eightTenths);
            Vector4 v2 = new Vector4 (
                oneOverRoot4, oneOverRoot4, oneOverRoot4, oneOverRoot4);

            Matrix44 rotmati = Matrix44.Identity;
            Matrix44 rotmat1; Matrix44.CreateRotationX(ref pi, out rotmat1);
            Matrix44 rotmat2; Matrix44.CreateRotationY(ref piOver2, out rotmat2);
            Matrix44 rotmat3; Matrix44.CreateRotationZ(ref minusPi, out rotmat3);
            Matrix44 rotmat4 = rotmat1 * rotmat2 * rotmat3;

            var tests = new Tuple<Vector4, Matrix44, Vector4>[]
            {
                //normal -> transform -> expected
                new Tuple<Vector4, Matrix44, Vector4>(
                    v1, rotmati, v1),

                new Tuple<Vector4, Matrix44, Vector4>(
                    v1, rotmat1, new Vector4 (0, -sixTenths, 0, eightTenths)),

                new Tuple<Vector4, Matrix44, Vector4>(
                    v1, rotmat2, new Vector4 (0, sixTenths, 0, eightTenths)),

                new Tuple<Vector4, Matrix44, Vector4>(
                    v1, rotmat3, new Vector4 (0, -sixTenths, 0, eightTenths)),

                new Tuple<Vector4, Matrix44, Vector4>(
                    v1, rotmat4, new Vector4 (0, sixTenths, 0, eightTenths)),

                //normal -> transform -> expected
                new Tuple<Vector4, Matrix44, Vector4>(
                    v2, rotmati, v2),

                new Tuple<Vector4, Matrix44, Vector4>(
                    v2, rotmat1, new Vector4 (
                        + oneOverRoot4,
                        - oneOverRoot4,
                        - oneOverRoot4,
                        + oneOverRoot4)),

                new Tuple<Vector4, Matrix44, Vector4>(
                    v2, rotmat2, new Vector4 (
                        + oneOverRoot4,
                        + oneOverRoot4,
                        - oneOverRoot4,
                        + oneOverRoot4)),

                new Tuple<Vector4, Matrix44, Vector4>(
                    v2, rotmat3, new Vector4 (
                        - oneOverRoot4,
                        - oneOverRoot4,
                        + oneOverRoot4,
                        + oneOverRoot4)),

                new Tuple<Vector4, Matrix44, Vector4>(
                    v2, rotmat4, new Vector4 (
                        + oneOverRoot4,
                        + oneOverRoot4,
                        - oneOverRoot4,
                        + oneOverRoot4))
            };

            foreach (var test in tests)
            {
                Vector4 normalVec = test.Item1;
                Matrix44 trans = test.Item2;
                Vector4 expected = test.Item3;

                Vector4 result;

                Vector4.TransformNormal (ref normalVec, ref trans, out result);
                AssertEqualWithinReason(result, expected);

                // should also work with the standard transform fn
                Vector4.Transform (ref normalVec, ref trans, out result);
                AssertEqualWithinReason(result, expected);
            }
        }
Vector4Tests