Пример #1
0
        void InitGrid()
        {
            List<PositionTexture> vertexList = null;
            List<Triangle> triangleList = null;
            vertexList = new List<PositionTexture>();
            triangleList = new List<Triangle>();

            vertexList.Add(new PositionTexture(Bounds[0, 0], 0, 0));
            vertexList.Add(new PositionTexture(Bounds[1, 0], .5f, 0));
            vertexList.Add(new PositionTexture(Bounds[2, 0], 1, 0));
            vertexList.Add(new PositionTexture(Bounds[0, 1], 0, .5f));
            vertexList.Add(new PositionTexture(Bounds[1, 1], .5f, .5f));
            vertexList.Add(new PositionTexture(Bounds[2, 1], 1, .5f));
            vertexList.Add(new PositionTexture(Bounds[0, 2], 0, 1));
            vertexList.Add(new PositionTexture(Bounds[1, 2], .5f, 1));
            vertexList.Add(new PositionTexture(Bounds[2, 2], 1, 1));

            if (Level == 0)
            {
                triangleList.Add(new Triangle(3, 7, 4));
                triangleList.Add(new Triangle(3, 6, 7));
                triangleList.Add(new Triangle(7, 5, 4));
                triangleList.Add(new Triangle(7, 8, 5));
                triangleList.Add(new Triangle(5, 1, 4));
                triangleList.Add(new Triangle(5, 2, 1));
                triangleList.Add(new Triangle(1, 3, 4));
                triangleList.Add(new Triangle(1, 0, 3));
            }
            else
            {
                if (backslash)
                {
                    triangleList.Add(new Triangle(4, 0, 3));
                    triangleList.Add(new Triangle(4, 1, 0));
                    triangleList.Add(new Triangle(5, 1, 4));
                    triangleList.Add(new Triangle(5, 2, 1));
                    triangleList.Add(new Triangle(3, 7, 4));
                    triangleList.Add(new Triangle(3, 6, 7));
                    triangleList.Add(new Triangle(7, 4, 8));
                    triangleList.Add(new Triangle(4, 7, 8));
                    triangleList.Add(new Triangle(8, 5, 4));


                }
                else
                {

                    triangleList.Add(new Triangle(1, 0, 3));
                    triangleList.Add(new Triangle(1, 3, 4));
                    triangleList.Add(new Triangle(2, 1, 4));
                    triangleList.Add(new Triangle(2, 4, 5));
                    triangleList.Add(new Triangle(6, 4, 3));
                    triangleList.Add(new Triangle(6, 7, 4));
                    triangleList.Add(new Triangle(7, 5, 4));
                    triangleList.Add(new Triangle(8, 5, 7));
                }

            }

            int count = subDivisions;
            subDivSize = 1.0f / (float)Math.Pow(2, subDivisions);
            while (count-- > 1)
            {
                List<Triangle> newList = new List<Triangle>();
                foreach (Triangle tri in triangleList)
                {
                    tri.SubDivide(newList, vertexList);
                }
                triangleList = newList;

            }

            int xCount = 1 + (int)Math.Pow(2, subDivisions);
            int yCount = 1 + (int)Math.Pow(2, subDivisions);

            PositionTexture[,] points = new PositionTexture[xCount, yCount];
            raDecMap = new Vector2d[xCount, yCount];
            foreach (PositionTexture vertex in vertexList)
            {
                int indexX = (int)((vertex.Tu / subDivSize) + .1);
                int indexY = (int)((vertex.Tv / subDivSize) + .1);

                points[indexX, indexY] = vertex;
            }
            for (int y = 0; y < yCount; y++)
            {
                for (int x = 0; x < xCount; x++)
                {
                    raDecMap[x, y] = points[x, y].Position.ToRaDec((y == 0 || x == 32) & !backslash);
                }
            }

            if (Level == 0)
            {
                raMin = 0;
                raMax = 360;
                decMin = -90;
                decMax = 90;
            }
            else
            {
                raMin = Math.Min(Math.Min((double)raDecMap[0, 0].X, raDecMap[0, yCount - 1].X), Math.Min((double)raDecMap[xCount - 1, 0].X, raDecMap[xCount - 1, yCount - 1].X));
                raMax = Math.Max(Math.Max((double)raDecMap[0, 0].X, raDecMap[0, yCount - 1].X), Math.Max((double)raDecMap[xCount - 1, 0].X, raDecMap[xCount - 1, yCount - 1].X));
                decMin = Math.Min(Math.Min((double)raDecMap[0, 0].Y, raDecMap[0, yCount - 1].Y), Math.Min((double)raDecMap[xCount - 1, 0].Y, raDecMap[xCount - 1, yCount - 1].Y));
                decMax = Math.Max(Math.Max((double)raDecMap[0, 0].Y, raDecMap[0, yCount - 1].Y), Math.Max((double)raDecMap[xCount - 1, 0].Y, raDecMap[xCount - 1, yCount - 1].Y));
                if (Math.Abs((double)(this.raMax - this.raMin)) > 180.0)
                {
                    this.raMin = this.raMax;
                    this.raMax = 360.0;
                }

            }
        }
Пример #2
0
        void InitGrid()
        {
            List <PositionTexture> vertexList   = null;
            List <Triangle>        triangleList = null;

            vertexList   = new List <PositionTexture>();
            triangleList = new List <Triangle>();

            vertexList.Add(new PositionTexture(Bounds[0, 0], 0, 0));
            vertexList.Add(new PositionTexture(Bounds[1, 0], .5f, 0));
            vertexList.Add(new PositionTexture(Bounds[2, 0], 1, 0));
            vertexList.Add(new PositionTexture(Bounds[0, 1], 0, .5f));
            vertexList.Add(new PositionTexture(Bounds[1, 1], .5f, .5f));
            vertexList.Add(new PositionTexture(Bounds[2, 1], 1, .5f));
            vertexList.Add(new PositionTexture(Bounds[0, 2], 0, 1));
            vertexList.Add(new PositionTexture(Bounds[1, 2], .5f, 1));
            vertexList.Add(new PositionTexture(Bounds[2, 2], 1, 1));

            if (Level == 0)
            {
                triangleList.Add(new Triangle(3, 7, 4));
                triangleList.Add(new Triangle(3, 6, 7));
                triangleList.Add(new Triangle(7, 5, 4));
                triangleList.Add(new Triangle(7, 8, 5));
                triangleList.Add(new Triangle(5, 1, 4));
                triangleList.Add(new Triangle(5, 2, 1));
                triangleList.Add(new Triangle(1, 3, 4));
                triangleList.Add(new Triangle(1, 0, 3));
            }
            else
            {
                if (backslash)
                {
                    triangleList.Add(new Triangle(4, 0, 3));
                    triangleList.Add(new Triangle(4, 1, 0));
                    triangleList.Add(new Triangle(5, 1, 4));
                    triangleList.Add(new Triangle(5, 2, 1));
                    triangleList.Add(new Triangle(3, 7, 4));
                    triangleList.Add(new Triangle(3, 6, 7));
                    triangleList.Add(new Triangle(7, 4, 8));
                    triangleList.Add(new Triangle(4, 7, 8));
                    triangleList.Add(new Triangle(8, 5, 4));
                }
                else
                {
                    triangleList.Add(new Triangle(1, 0, 3));
                    triangleList.Add(new Triangle(1, 3, 4));
                    triangleList.Add(new Triangle(2, 1, 4));
                    triangleList.Add(new Triangle(2, 4, 5));
                    triangleList.Add(new Triangle(6, 4, 3));
                    triangleList.Add(new Triangle(6, 7, 4));
                    triangleList.Add(new Triangle(7, 5, 4));
                    triangleList.Add(new Triangle(8, 5, 7));
                }
            }

            int count = subDivisions;

            subDivSize = 1.0f / (float)Math.Pow(2, subDivisions);
            while (count-- > 1)
            {
                List <Triangle> newList = new List <Triangle>();
                foreach (Triangle tri in triangleList)
                {
                    tri.SubDivide(newList, vertexList);
                }
                triangleList = newList;
            }

            int xCount = 1 + (int)Math.Pow(2, subDivisions);
            int yCount = 1 + (int)Math.Pow(2, subDivisions);

            PositionTexture[,] points = new PositionTexture[xCount, yCount];
            raDecMap = new Vector2d[xCount, yCount];
            foreach (PositionTexture vertex in vertexList)
            {
                int indexX = (int)((vertex.Tu / subDivSize) + .1);
                int indexY = (int)((vertex.Tv / subDivSize) + .1);

                points[indexX, indexY] = vertex;
            }
            for (int y = 0; y < yCount; y++)
            {
                for (int x = 0; x < xCount; x++)
                {
                    raDecMap[x, y] = points[x, y].Position.ToRaDec((y == 0 || x == 32) & !backslash);
                }
            }

            if (Level == 0)
            {
                raMin  = 0;
                raMax  = 360;
                decMin = -90;
                decMax = 90;
            }
            else
            {
                raMin  = Math.Min(Math.Min((double)raDecMap[0, 0].X, raDecMap[0, yCount - 1].X), Math.Min((double)raDecMap[xCount - 1, 0].X, raDecMap[xCount - 1, yCount - 1].X));
                raMax  = Math.Max(Math.Max((double)raDecMap[0, 0].X, raDecMap[0, yCount - 1].X), Math.Max((double)raDecMap[xCount - 1, 0].X, raDecMap[xCount - 1, yCount - 1].X));
                decMin = Math.Min(Math.Min((double)raDecMap[0, 0].Y, raDecMap[0, yCount - 1].Y), Math.Min((double)raDecMap[xCount - 1, 0].Y, raDecMap[xCount - 1, yCount - 1].Y));
                decMax = Math.Max(Math.Max((double)raDecMap[0, 0].Y, raDecMap[0, yCount - 1].Y), Math.Max((double)raDecMap[xCount - 1, 0].Y, raDecMap[xCount - 1, yCount - 1].Y));
                if (Math.Abs((double)(this.raMax - this.raMin)) > 180.0)
                {
                    this.raMin = this.raMax;
                    this.raMax = 360.0;
                }
            }
        }