Beispiel #1
0
        public void World1_MarkerTransform_Flame()
        {
            const double DIMENSION   = 6;
            const double Y_DIMENSION = -1.5;
            // must "walk out" the marker dimensions to DC
            var mkwid_indc = MK_WIDTH * WIDTH * World1.M11;
            // now "walk in" the DC to Y-axis
            var mkhgt_inyaxis = mkwid_indc / HEIGHT / World1.M22;

            TestContext.WriteLine($"marker width in DC {mkwid_indc} height in y-axis {mkhgt_inyaxis} world1 {World1}");
            Assert.AreEqual(DIMENSION, mkwid_indc, "mkwid in DC failed");
            AssertDouble(Y_DIMENSION, mkhgt_inyaxis, "mkhgt in Y-axis failed");
            // multiply Mk * M * P
            // this matrix establishes the local coordinate system for the marker (6x6 pixels based on dimensions)
            // TODO get the marker center (.5,.5) to "line up" on the "target" point in M-coordinates
            // TODO get the translation for target M-coordinate
            var marker    = MatrixSupport.LocalFor(World1, MK_WIDTH, Bounds, -.5, -.5);
            var model2    = MatrixSupport.Multiply(marker, World1);
            var modelproj = MatrixSupport.Multiply(model2, Projection);
            var ul        = modelproj.Transform(Origin);
            var center    = modelproj.Transform(TestPointMarkerCenter);
            var lr        = modelproj.Transform(new Point(1, 1));

            TestContext.WriteLine($"marker matx {marker}  model2 {model2}  final {modelproj}  UL {ul}  center {center}  LR {lr}");
            // because of Y-axis "shift" the ZERO is 60 percent of the axis range
            var zerodp = HEIGHT * .6;
            var mkhalf = DIMENSION / 2;

            Assert.AreEqual(Bounds.Left, center.X, "center.X failed");
            Assert.AreEqual(Bounds.Top + zerodp, center.Y, "center.Y failed");
            Assert.AreEqual(Bounds.Left - mkhalf, ul.X, "ul.X failed");
            Assert.AreEqual(Bounds.Top + zerodp - mkhalf, ul.Y, "ul.Y failed");
            Assert.AreEqual(Bounds.Left + mkhalf, lr.X, "lr.X failed");
            Assert.AreEqual(Bounds.Top + zerodp + mkhalf, lr.Y, "lr.Y failed");
        }
Beispiel #2
0
        public void Matrix_Multiply2_World1()
        {
            var modelproj = MatrixSupport.Multiply(World1, Projection);

            TestContext.WriteLine($"modelproj {modelproj}");
            var point = modelproj.Transform(W1UL);

            Assert.AreEqual(Bounds.Left, point.X, "X failed");
            Assert.AreEqual(Bounds.Top, point.Y, "Y failed");
        }
Beispiel #3
0
        public void Matrix_Multiply_Contrived()
        {
            var lhs       = new Matrix(1, 2, 2, 3, 4, 6);
            var rhs       = new Matrix(2, 1, 4, 2, 1, 3);
            var result    = new Matrix(10, 5, 16, 8, 33, 19);
            var modelproj = MatrixSupport.Multiply(lhs, rhs);

            TestContext.WriteLine($"modelproj {modelproj}");
            MatrixEqual(result, modelproj);
        }
Beispiel #4
0
        public void Matrix_Inverse_Projection()
        {
            var point = Projection.Transform(Origin);

            Assert.AreEqual(Bounds.Left, point.X, "X failed");
            Assert.AreEqual(Bounds.Top, point.Y, "Y failed");
            var invproj = MatrixSupport.Invert(Projection);

            TestContext.WriteLine($"proj {Projection}  inv {invproj}");
            var ppoint = invproj.Transform(point);

            Assert.AreEqual(Origin.X, ppoint.X, "X failed");
            Assert.AreEqual(Origin.Y, ppoint.Y, "Y failed");
        }
Beispiel #5
0
        public void Matrix_Inverse_MatchesMatrixTransform()
        {
            var invproj = MatrixSupport.Invert(Projection);
            var mat     = new MatrixTransform()
            {
                Matrix = Projection
            };
            var matinv = mat.Inverse;

            Assert.IsInstanceOfType(matinv, typeof(MatrixTransform), "matinv failed");
            var mat2 = (matinv as MatrixTransform).Matrix;

            TestContext.WriteLine($"matinv {matinv}  mat2 {mat2}  invproj {invproj}");
            MatrixEqual(mat2, invproj);
        }
Beispiel #6
0
        public void World1_MarkerTransform_ForPoint()
        {
            var world1t = MatrixSupport.Translate(World1, TestPoint.X, TestPoint.Y);

            TestContext.WriteLine($"world1t {world1t} testpoint ${TestPoint}");
            var marker    = MatrixSupport.LocalFor(world1t, MK_WIDTH, Bounds, -.5, -.5);
            var model2    = MatrixSupport.Multiply(marker, world1t);
            var mkproj    = MatrixSupport.Multiply(model2, Projection);
            var modelproj = MatrixSupport.Multiply(World1, Projection);
            var reference = modelproj.Transform(TestPoint);
            var target    = mkproj.Transform(TestPointMarkerCenter);

            TestContext.WriteLine($"marker {marker}  model2 {model2}  Mk.M.P {mkproj}");
            TestContext.WriteLine($"M.P {modelproj}  pt {TestPointMarkerCenter}  ref {reference}  target {target}");
            Assert.AreEqual(reference.X, target.X, "target.X failed");
            Assert.AreEqual(reference.Y, target.Y, "target.Y failed");
        }
Beispiel #7
0
        public void Matrix_Translate_Transform()
        {
            var wtrans = MatrixSupport.Translate(World1, TestPoint.X, TestPoint.Y);

            TestContext.WriteLine($"modeltrans {wtrans}");
            // with the translation, (0,0) is our test point (WC->NDC)
            var point = wtrans.Transform(Origin);

            AssertDouble(TestPoint_ndc.X, point.X, "X failed");
            AssertDouble(TestPoint_ndc.Y, point.Y, "Y failed");
            // cross-check through W1 inverse
            var winv = MatrixSupport.Invert(World1);
            // this goes back to world coordinates (NDC->WC)
            var point2 = winv.Transform(point);

            Assert.AreEqual(TestPoint.X, point2.X, "X failed.2");
            Assert.AreEqual(TestPoint.Y, point2.Y, "Y failed.2");
        }
Beispiel #8
0
        public void Matrix_Translate_MatchesTransformGroup()
        {
            var gt = new TransformGroup();

            gt.Children.Add(new TranslateTransform()
            {
                X = TestPoint.X, Y = TestPoint.Y
            });
            gt.Children.Add(new MatrixTransform()
            {
                Matrix = World1
            });
            TestContext.WriteLine($"final matrix {gt.Value}");
            var modeltrans = MatrixSupport.Translate(World1, TestPoint.X, TestPoint.Y);

            TestContext.WriteLine($"modeltrans {modeltrans}");
            MatrixEqual(gt.Value, modeltrans);
        }
Beispiel #9
0
        public void Matrix_Multiply_MatchesTransformGroup()
        {
            var gt = new TransformGroup();

            gt.Children.Add(new MatrixTransform()
            {
                Matrix = World1
            });
            gt.Children.Add(new MatrixTransform()
            {
                Matrix = Projection
            });
            TestContext.WriteLine($"final matrix {gt.Value}");
            var modelproj = MatrixSupport.Multiply(World1, Projection);

            TestContext.WriteLine($"modelproj2 {modelproj}");
            MatrixEqual(gt.Value, modelproj);
        }
Beispiel #10
0
        public void Matrix_TransformGroup_Multiply2_Contrived()
        {
            var lhs    = new Matrix(2, 1, 4, 2, 1, 3);
            var rhs    = new Matrix(1, 2, 2, 3, 4, 6);
            var result = new Matrix(4, 7, 8, 14, 11, 17);
            var gt     = new TransformGroup();

            gt.Children.Add(new MatrixTransform()
            {
                Matrix = lhs
            });
            gt.Children.Add(new MatrixTransform()
            {
                Matrix = rhs
            });
            TestContext.WriteLine($"final matrix {gt.Value}");
            MatrixEqual(result, gt.Value);
            var modelproj = MatrixSupport.Multiply(lhs, rhs);

            TestContext.WriteLine($"modelproj {modelproj}");
            MatrixEqual(gt.Value, modelproj);
        }