Beispiel #1
0
    public static IsLandShapeGen MakeRadial(uint seed)
    {
        ParkMillerRNG isLandRandom = new ParkMillerRNG();

        isLandRandom.Seed = seed;
        uint   bumps      = isLandRandom.NextIntRange(1, 6);
        double startAngle = isLandRandom.NextDoubleRange(0, 2 * Mathf.PI);
        double dipAngle   = isLandRandom.NextDoubleRange(0, 2 * Mathf.PI);
        double dipWidth   = isLandRandom.NextDoubleRange(0.2, 0.7);

        bool inside(Vector2f q)
        {
            double angle  = Mathf.Atan2(q.y, q.x);
            float  max    = Mathf.Max(Mathf.Abs(q.x), Mathf.Abs(q.y));
            float  length = 0.5f * (max + q.magnitude);
            double f      = bumps + 3.0f;
            double r1     = 0.5f + 0.40f * System.Math.Sin(startAngle + bumps * angle + System.Math.Cos(f * angle));
            double r2     = 0.7 - 0.20 * System.Math.Sin(startAngle + bumps * angle - System.Math.Sin((bumps + 2) * angle));

            if (System.Math.Abs(angle - dipAngle) < dipWidth ||
                System.Math.Abs(angle - dipAngle + 2 * System.Math.PI) < dipWidth ||
                System.Math.Abs(angle - dipAngle - 2 * System.Math.PI) < dipWidth)
            {
                r1 = r2 = 0.2;
            }
            return(length < r1 || (length > r1 * ISLAND_FACTOR && length < r2));
        }

        IsLandShapeGen islandShapeGen = inside;

        return(islandShapeGen);
    }
Beispiel #2
0
    public static PointGen generateRandom(int size, uint seed)
    {
        List <Vector2f> generate(int numPoint)
        {
            ParkMillerRNG mapRandom = new ParkMillerRNG();

            mapRandom.Seed = seed;
            List <Vector2f> points = new List <Vector2f>();

            for (int i = 0; i < numPoint; i++)
            {
                double   mx = mapRandom.NextDoubleRange(10, size - 10);
                double   my = mapRandom.NextDoubleRange(10, size - 10);
                Vector2f p  = new Vector2f(mx, my);
                points.Add(p);
            }
            return(points);
        }

        PointGen pGen = generate;

        return(pGen);
    }