Пример #1
0
        public void GenerateUVGridParameters()
        {
            double[][][] r, a;
            int          uDiv, vDiv;
            double       e;

            uDiv = 5;
            vDiv = 2;
            e    = 0.0001;

            r = SurfaceDivider.GenerateUVGridParameters(uDiv, vDiv);
            a = new double[][][]
            {
                new double[][] {
                    new double[] { 0, 0 },
                    new double[] { 0, 0.5 },
                    new double[] { 0, 1 },
                },
                new double[][] {
                    new double[] { 0.2, 0 },
                    new double[] { 0.2, 0.5 },
                    new double[] { 0.2, 1 },
                },
                new double[][] {
                    new double[] { 0.4, 0 },
                    new double[] { 0.4, 0.5 },
                    new double[] { 0.4, 1 },
                },
                new double[][] {
                    new double[] { 0.6, 0 },
                    new double[] { 0.6, 0.5 },
                    new double[] { 0.6, 1 },
                },
                new double[][] {
                    new double[] { 0.8, 0 },
                    new double[] { 0.8, 0.5 },
                    new double[] { 0.8, 1 },
                },
                new double[][] {
                    new double[] { 1.0, 0 },
                    new double[] { 1.0, 0.5 },
                    new double[] { 1.0, 1 },
                },
            };

            for (int i = 0; i < 6; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    Assert.IsTrue(a[i][j].SequenceEqual(r[i][j], e));
                }
            }
        }
Пример #2
0
        public void GeneratePointGrid()
        {
            double[][][]      pts, r, a = null;
            ParametricSurface srf;
            int    uCount, vCount;
            double e;

            e = 0.0001;

            pts = new double[][][]
            {
                new double[][] {
                    new double[] { 0.0, 0.0, 1.0 },
                    new double[] { 0.0, 1.0, 2.0 },
                    new double[] { 0.0, 2.0, 0.0 },
                    new double[] { 0.0, 3.0, 1.0 },
                    new double[] { 0.0, 4.0, 1.0 },
                },
                new double[][] {
                    new double[] { 1.0, 0.0, 2.0 },
                    new double[] { 1.0, 1.0, 2.0 },
                    new double[] { 1.0, 2.0, 1.0 },
                    new double[] { 1.0, 3.0, 1.0 },
                    new double[] { 1.0, 4.0, 1.0 },
                },
                new double[][] {
                    new double[] { 2.0, 0.0, 2.0 },
                    new double[] { 2.0, 1.0, 1.0 },
                    new double[] { 2.0, 2.0, 1.0 },
                    new double[] { 2.0, 3.0, 1.0 },
                    new double[] { 2.0, 4.0, 2.0 },
                },
            };

            srf    = new BezierSurface(pts);
            uCount = 10;
            vCount = 4;
            r      = SurfaceDivider.GeneratePointGrid(srf, uCount, vCount);
            a      = new double[][][] {
                new double[][] {
                    new double[] { 0.0, 0.0, 1.0 },
                    new double[] { 0.0, 1.0, 1.210938 },
                    new double[] { 0.0, 2.0, 0.875 },
                    new double[] { 0.0, 3.0, 0.835938 },
                    new double[] { 0.0, 4.0, 1.0 },
                },
                new double[][] {
                    new double[] { 0.2, 0.0, 1.19 },
                    new double[] { 0.2, 1.0, 1.306953 },
                    new double[] { 0.2, 2.0, 0.95625 },
                    new double[] { 0.2, 3.0, 0.879453 },
                    new double[] { 0.2, 4.0, 1.01 },
                },
                new double[][] {
                    new double[] { 0.4, 0.0, 1.36 },
                    new double[] { 0.4, 1.0, 1.384063 },
                    new double[] { 0.4, 2.0, 1.025 },
                    new double[] { 0.4, 3.0, 0.924063 },
                    new double[] { 0.4, 4.0, 1.04 },
                },
                new double[][] {
                    new double[] { 0.6, 0.0, 1.51 },
                    new double[] { 0.6, 1.0, 1.442266 },
                    new double[] { 0.6, 2.0, 1.08125 },
                    new double[] { 0.6, 3.0, 0.969766 },
                    new double[] { 0.6, 4.0, 1.09 },
                },
                new double[][] {
                    new double[] { 0.8, 0.0, 1.64 },
                    new double[] { 0.8, 1.0, 1.481563 },
                    new double[] { 0.8, 2.0, 1.125 },
                    new double[] { 0.8, 3.0, 1.016562 },
                    new double[] { 0.8, 4.0, 1.16 },
                },
                new double[][] {
                    new double[] { 1.0, 0.0, 1.75 },
                    new double[] { 1.0, 1.0, 1.501953 },
                    new double[] { 1.0, 2.0, 1.15625 },
                    new double[] { 1.0, 3.0, 1.064453 },
                    new double[] { 1.0, 4.0, 1.25 },
                },
                new double[][] {
                    new double[] { 1.2, 0.0, 1.84 },
                    new double[] { 1.2, 1.0, 1.503438 },
                    new double[] { 1.2, 2.0, 1.175 },
                    new double[] { 1.2, 3.0, 1.113437 },
                    new double[] { 1.2, 4.0, 1.36 },
                },
                new double[][] {
                    new double[] { 1.4, 0.0, 1.91 },
                    new double[] { 1.4, 1.0, 1.486016 },
                    new double[] { 1.4, 2.0, 1.18125 },
                    new double[] { 1.4, 3.0, 1.163516 },
                    new double[] { 1.4, 4.0, 1.49 },
                },
                new double[][] {
                    new double[] { 1.6, 0.0, 1.96 },
                    new double[] { 1.6, 1.0, 1.449687 },
                    new double[] { 1.6, 2.0, 1.175 },
                    new double[] { 1.6, 3.0, 1.214688 },
                    new double[] { 1.6, 4.0, 1.64 },
                },
                new double[][] {
                    new double[] { 1.8, 0.0, 1.99 },
                    new double[] { 1.8, 1.0, 1.394453 },
                    new double[] { 1.8, 2.0, 1.15625 },
                    new double[] { 1.8, 3.0, 1.266953 },
                    new double[] { 1.8, 4.0, 1.81 },
                },
                new double[][] {
                    new double[] { 2.0, 0.0, 2.0 },
                    new double[] { 2.0, 1.0, 1.320313 },
                    new double[] { 2.0, 2.0, 1.125 },
                    new double[] { 2.0, 3.0, 1.320313 },
                    new double[] { 2.0, 4.0, 2.0 },
                },
            };

            for (int i = 0; i < r.Length; i++)
            {
                for (int j = 0; j < r[0].Length; j++)
                {
                    Assert.IsTrue(r[i][j].SequenceEqual(a[i][j], e));
                }
            }
        }
Пример #3
0
        public void GenerateGridSegment()
        {
            double[][][]      pts;
            double [][]       r, a = null;
            ParametricSurface srf;
            int    uCount, vCount;
            double e;

            e = 0.0001;

            pts = new double[][][]
            {
                new double[][] {
                    new double[] { 0.0, 0.0, 1.0 },
                    new double[] { 0.0, 1.0, 2.0 },
                    new double[] { 0.0, 2.0, 0.0 },
                    new double[] { 0.0, 3.0, 1.0 },
                    new double[] { 0.0, 4.0, 1.0 },
                },
                new double[][] {
                    new double[] { 1.0, 0.0, 2.0 },
                    new double[] { 1.0, 1.0, 2.0 },
                    new double[] { 1.0, 2.0, 1.0 },
                    new double[] { 1.0, 3.0, 1.0 },
                    new double[] { 1.0, 4.0, 1.0 },
                },
                new double[][] {
                    new double[] { 2.0, 0.0, 2.0 },
                    new double[] { 2.0, 1.0, 1.0 },
                    new double[] { 2.0, 2.0, 1.0 },
                    new double[] { 2.0, 3.0, 1.0 },
                    new double[] { 2.0, 4.0, 2.0 },
                },
            };

            srf    = new BezierSurface(pts);
            uCount = 10;
            vCount = 4;
            r      = SurfaceDivider.GenerateGridSegment(srf, uCount, vCount);
            a      = new double[][] {
                new double[] { 0, 0, 1, 0, 1, 1.2109375 },
                new double[] { 0, 1, 1.2109375, 0, 2, 0.875 },
                new double[] { 0, 2, 0.875, 0, 3, 0.8359375 },
                new double[] { 0, 3, 0.8359375, 0, 4, 1 },
                new double[] { 0.2, 0, 1.19, 0.2, 1, 1.306953125 },
                new double[] { 0.2, 1, 1.306953125, 0.2, 2, 0.95625 },
                new double[] { 0.2, 2, 0.95625, 0.2, 3, 0.879453125 },
                new double[] { 0.2, 3, 0.879453125, 0.2, 4, 1.01 },
                new double[] { 0.4, 0, 1.36, 0.4, 1, 1.3840625 },
                new double[] { 0.4, 1, 1.3840625, 0.4, 2, 1.025 },
                new double[] { 0.4, 2, 1.025, 0.4, 3, 0.9240625 },
                new double[] { 0.4, 3, 0.9240625, 0.4, 4, 1.04 },
                new double[] { 0.6, 0, 1.51, 0.6, 1, 1.442265625 },
                new double[] { 0.6, 1, 1.442265625, 0.6, 2, 1.08125 },
                new double[] { 0.6, 2, 1.08125, 0.6, 3, 0.969765625 },
                new double[] { 0.6, 3, 0.969765625, 0.6, 4, 1.09 },
                new double[] { 0.8, 0, 1.64, 0.8, 1, 1.4815625 },
                new double[] { 0.8, 1, 1.4815625, 0.8, 2, 1.125 },
                new double[] { 0.8, 2, 1.125, 0.8, 3, 1.0165625 },
                new double[] { 0.8, 3, 1.0165625, 0.8, 4, 1.16 },
                new double[] { 1, 0, 1.75, 1, 1, 1.501953125 },
                new double[] { 1, 1, 1.501953125, 1, 2, 1.15625 },
                new double[] { 1, 2, 1.15625, 1, 3, 1.064453125 },
                new double[] { 1, 3, 1.064453125, 1, 4, 1.25 },
                new double[] { 1.2, 0, 1.84, 1.2, 1, 1.5034375 },
                new double[] { 1.2, 1, 1.5034375, 1.2, 2, 1.175 },
                new double[] { 1.2, 2, 1.175, 1.2, 3, 1.1134375 },
                new double[] { 1.2, 3, 1.1134375, 1.2, 4, 1.36 },
                new double[] { 1.4, 0, 1.91, 1.4, 1, 1.486015625 },
                new double[] { 1.4, 1, 1.486015625, 1.4, 2, 1.18125 },
                new double[] { 1.4, 2, 1.18125, 1.4, 3, 1.163515625 },
                new double[] { 1.4, 3, 1.163515625, 1.4, 4, 1.49 },
                new double[] { 1.6, 0, 1.96, 1.6, 1, 1.4496875 },
                new double[] { 1.6, 1, 1.4496875, 1.6, 2, 1.175 },
                new double[] { 1.6, 2, 1.175, 1.6, 3, 1.2146875 },
                new double[] { 1.6, 3, 1.2146875, 1.6, 4, 1.64 },
                new double[] { 1.8, 0, 1.99, 1.8, 1, 1.394453125 },
                new double[] { 1.8, 1, 1.394453125, 1.8, 2, 1.15625 },
                new double[] { 1.8, 2, 1.15625, 1.8, 3, 1.266953125 },
                new double[] { 1.8, 3, 1.266953125, 1.8, 4, 1.81 },
                new double[] { 2, 0, 2, 2, 1, 1.3203125 },
                new double[] { 2, 1, 1.3203125, 2, 2, 1.125 },
                new double[] { 2, 2, 1.125, 2, 3, 1.3203125 },
                new double[] { 2, 3, 1.3203125, 2, 4, 2 },
                new double[] { 0, 0, 1, 0.2, 0, 1.19 },
                new double[] { 0.2, 0, 1.19, 0.4, 0, 1.36 },
                new double[] { 0.4, 0, 1.36, 0.6, 0, 1.51 },
                new double[] { 0.6, 0, 1.51, 0.8, 0, 1.64 },
                new double[] { 0.8, 0, 1.64, 1, 0, 1.75 },
                new double[] { 1, 0, 1.75, 1.2, 0, 1.84 },
                new double[] { 1.2, 0, 1.84, 1.4, 0, 1.91 },
                new double[] { 1.4, 0, 1.91, 1.6, 0, 1.96 },
                new double[] { 1.6, 0, 1.96, 1.8, 0, 1.99 },
                new double[] { 1.8, 0, 1.99, 2, 0, 2 },
                new double[] { 0, 1, 1.2109375, 0.2, 1, 1.306953125 },
                new double[] { 0.2, 1, 1.306953125, 0.4, 1, 1.3840625 },
                new double[] { 0.4, 1, 1.3840625, 0.6, 1, 1.442265625 },
                new double[] { 0.6, 1, 1.442265625, 0.8, 1, 1.4815625 },
                new double[] { 0.8, 1, 1.4815625, 1, 1, 1.501953125 },
                new double[] { 1, 1, 1.501953125, 1.2, 1, 1.5034375 },
                new double[] { 1.2, 1, 1.5034375, 1.4, 1, 1.486015625 },
                new double[] { 1.4, 1, 1.486015625, 1.6, 1, 1.4496875 },
                new double[] { 1.6, 1, 1.4496875, 1.8, 1, 1.394453125 },
                new double[] { 1.8, 1, 1.394453125, 2, 1, 1.3203125 },
                new double[] { 0, 2, 0.875, 0.2, 2, 0.95625 },
                new double[] { 0.2, 2, 0.95625, 0.4, 2, 1.025 },
                new double[] { 0.4, 2, 1.025, 0.6, 2, 1.08125 },
                new double[] { 0.6, 2, 1.08125, 0.8, 2, 1.125 },
                new double[] { 0.8, 2, 1.125, 1, 2, 1.15625 },
                new double[] { 1, 2, 1.15625, 1.2, 2, 1.175 },
                new double[] { 1.2, 2, 1.175, 1.4, 2, 1.18125 },
                new double[] { 1.4, 2, 1.18125, 1.6, 2, 1.175 },
                new double[] { 1.6, 2, 1.175, 1.8, 2, 1.15625 },
                new double[] { 1.8, 2, 1.15625, 2, 2, 1.125 },
                new double[] { 0, 3, 0.8359375, 0.2, 3, 0.879453125 },
                new double[] { 0.2, 3, 0.879453125, 0.4, 3, 0.9240625 },
                new double[] { 0.4, 3, 0.9240625, 0.6, 3, 0.969765625 },
                new double[] { 0.6, 3, 0.969765625, 0.8, 3, 1.0165625 },
                new double[] { 0.8, 3, 1.0165625, 1, 3, 1.064453125 },
                new double[] { 1, 3, 1.064453125, 1.2, 3, 1.1134375 },
                new double[] { 1.2, 3, 1.1134375, 1.4, 3, 1.163515625 },
                new double[] { 1.4, 3, 1.163515625, 1.6, 3, 1.2146875 },
                new double[] { 1.6, 3, 1.2146875, 1.8, 3, 1.266953125 },
                new double[] { 1.8, 3, 1.266953125, 2, 3, 1.3203125 },
                new double[] { 0, 4, 1, 0.2, 4, 1.01 },
                new double[] { 0.2, 4, 1.01, 0.4, 4, 1.04 },
                new double[] { 0.4, 4, 1.04, 0.6, 4, 1.09 },
                new double[] { 0.6, 4, 1.09, 0.8, 4, 1.16 },
                new double[] { 0.8, 4, 1.16, 1, 4, 1.25 },
                new double[] { 1, 4, 1.25, 1.2, 4, 1.36 },
                new double[] { 1.2, 4, 1.36, 1.4, 4, 1.49 },
                new double[] { 1.4, 4, 1.49, 1.6, 4, 1.64 },
                new double[] { 1.6, 4, 1.64, 1.8, 4, 1.81 },
                new double[] { 1.8, 4, 1.81, 2, 4, 2 },
            };

            for (int i = 0; i < r.Length; i++)
            {
                Assert.IsTrue(r[i].SequenceEqual(a[i], e));
            }
        }