示例#1
0
        public static GeoGrid seaLevel(GeoGrid input, Project proj)
        {
            float   sea       = proj.SeaLevel;
            int     freq      = input.getFrequency();
            GeoGrid landForms = new GeoGrid(proj.Frequency);

            for (int par = 0; par < GeoGrid.NUMPARA; par++)
            {
                for (int r = 0; r < freq - 1; r++)
                {
                    for (int c = 0; c < 2 * freq - 1; c++)
                    {
                        if (input.getTile(par, r, c).Value <= sea)
                        {
                            landForms.getTile(par, r, c).Value = 0f;
                        }
                        else
                        {
                            landForms.getTile(par, r, c).Value = 1f;
                        }
                        if (r == 0 && c == 0)
                        {
                            landForms.getTile(par, r, c).Value = 1f;
                        }
                        else if (r == 0 && c == freq - 1)
                        {
                            landForms.getTile(par, r, c).Value = 1f;
                        }
                        else if (r == 0 && c == 2 * freq - 2)
                        {
                            landForms.getTile(par, r, c).Value = 1f;
                        }
                        else if (r == freq - 1 && c == 0)
                        {
                            landForms.getTile(par, r, c).Value = 1f;
                        }
                        else if (r == freq - 1 && c == freq - 1)
                        {
                            landForms.getTile(par, r, c).Value = 1f;
                        }
                        else if (r == freq - 1 && c == 2 * freq - 2)
                        {
                            landForms.getTile(par, r, c).Value = 1f;
                        }
                    }
                }
            }
            return(landForms);
        }
示例#2
0
        public void drawGrid()
        {
            int   frequency = grid.getFrequency();
            float size;
            float initX;
            float initY;

            if (ASPECT <= ICOASPECT)
            {
                size  = (2.0f * ASPECT) / ((11.0f) * (frequency - 1) * (ROOT3 / 2.0f));
                initX = -ASPECT + (2.0f * ASPECT) / 11.0f;
                initY = 1.0f - (1.0f - ASPECT / ICOASPECT);

                for (int i = 0; i < 5; i++)
                {
                    DrawIcoFace(frequency, size, initX, initY, i, 0);
                    DrawIcoFace(frequency, size, initX, initY - ((ROOT3 * 2.0f * ASPECT) / 5.5f), i, 1);
                    DrawIcoFace(frequency, size, initX + ((2.0f * ASPECT) / 11.0f), initY - ((ROOT3 * ASPECT) / 5.5f), i, 2);
                    DrawIcoFace(frequency, size, initX + ((2.0f * ASPECT) / 11.0f), initY - ((ROOT3 * 3.0f * ASPECT) / 5.5f), i, 3);

                    initX += (2.0f * ASPECT) / 5.5f;
                }
            }
            else
            {
                size  = 4.0f / (9.0f * (frequency - 1));
                initX = -ICOASPECT + (ICOASPECT / 11.0f);
                initY = 1.0f;

                for (int i = 0; i < 5; i++)
                {
                    DrawIcoFace(frequency, size, initX + (2 * i * ICOASPECT / 5.5f), initY, i, 0);
                    DrawIcoFace(frequency, size, initX + (2 * i * ICOASPECT / 5.5f), initY - (4.0f / 3.0f), i, 1);
                    DrawIcoFace(frequency, size, initX + ((2 * i + 1) * ICOASPECT / 5.5f), initY - (2.0f / 3.0f), i, 2);
                    DrawIcoFace(frequency, size, initX + ((2 * i + 1) * ICOASPECT / 5.5f), initY - (6.0f / 3.0f), i, 3);
                }
            }
        }
示例#3
0
        //cutoff determines the amount of steps before moisture reaches its lowest point
        public static RectGrid moisture(RectGrid input, Project proj, int cutoff)
        {
            GeoGrid             geo       = new GeoGrid(proj.Frequency);
            GeoGrid             output    = new GeoGrid(proj.Frequency);
            RectGrid            coastDist = new RectGrid(input.Height, input.Width);
            GridDisplayEquiRect temp      = new GridDisplayEquiRect(proj.Frequency);

            temp.RectToGeo(input, geo);
            GeoGrid landForms = seaLevel(geo, proj);
            int     freq      = landForms.getFrequency();
            int     rank      = 1;

            Tile[] mates;
            bool   clear = false;

            while (!clear)
            {
                clear = true;
                GeoGrid next = landForms.deepCopy(proj.Frequency);
                //Wheeeeeeee~
                for (int par = 0; par < GeoGrid.NUMPARA; par++)
                {
                    for (int r = 0; r < freq - 1; r++)
                    {
                        for (int c = 0; c < 2 * freq - 1; c++)
                        {
                            //If it's a land tile that hasn't been visited...
                            if (landForms.getTile(par, r, c).Value > .5f)
                            {
                                mates = landForms.neighbors(r, c, par);
                                for (int m = 0; m < mates.Length; m++)
                                {
                                    //if it's a sea tile
                                    if (mates[m].Value < .5f)
                                    {
                                        //Remove from next step
                                        next.getTile(par, r, c).Value = 0f;
                                        //set distance away from coast
                                        output.getTile(par, r, c).Rank = Math.Min(rank, cutoff);
                                        clear = false;
                                    }
                                }
                            }
                        }
                    }
                }
                landForms = next;
                rank++;
            }
            //Determine moisture weight by dividing by cutoff (yes, I coulda put this in the loop above)
            for (int par = 0; par < GeoGrid.NUMPARA; par++)
            {
                for (int r = 0; r < freq - 1; r++)
                {
                    for (int c = 0; c < 2 * freq - 1; c++)
                    {
                        output.getTile(par, r, c).Value = 1 - ((float)output.getTile(par, r, c).Rank / cutoff);
                        output.getTile(par, r, c).Rank  = 0;
                    }
                }
            }
            temp.LoadGrid(output);
            temp.GeoToRect(coastDist);
            return(coastDist);
        }