Círculos de gradiente para o gerador de mapas

Então, eu estou criando um gerador de mapas que cria ilhas aleatórias. Ele usa o Perlin Noise no coração do gerador e, em seguida, um método usando círculos com gradientes para formar as ilhas.

O método circle cria vários círculos no centro do mapa com um gradiente de uma cor que começa de 64 a 0. O problema é que esse método está criando uma aparência não natural de partes do mapa com arestas circulares. Quando o ruído perlin é gerado para um pixel, ele recebe o pixel no mapa de gradiente e, em seguida, o mutifica pelo valor em azul.

Portanto, se o ruído perlin der um no pixel 1, 5 e o valor azul no mapa de gradiente for 54, ele emitirá um valor de ruído 54. Se o ruído perlin no pixel 130, 560 for 0,5 e o valor da cor gradiente for 64 então o valor do ruído de 32.

Aqui está o que estou recebendo:

Existem dois pontos principais no código, o bit perlin:

noise = NoiseGenerator.Noise(x, y);
double gradColour = getGradColour(x, y).B;
double addedNoise = noise * gradColour;
double gradNoise = addedNoise;// - gradColour;

E então o gerador de mapa de gradiente:

    public static void DrawGrad(float X, float Y, float R, Color C1, Color C2)
    {
        Graphics g = Graphics.FromImage(imgGrad);
        GraphicsPath path = new GraphicsPath();
        path.AddEllipse(X, Y, R, R);

        PathGradientBrush pathGrBrush = new PathGradientBrush(path);
        pathGrBrush.CenterColor = C1;

        Color[] colours = { C2 };
        pathGrBrush.SurroundColors = colours;
        g.FillEllipse(pathGrBrush, X, Y, R, R);
        //g.FillEllipse(Brushes.Red, X, Y, R, R);
        g.Flush();
    }

        int amount = rnd.Next(25, 30);
        for (int i = 0; i < amount / 4; i++)
        {
            float X = rnd.Next(-800, 1748);
            float Y = rnd.Next(-800, 1748);
            float R = rnd.Next(1000, 1200);
            DrawGrad(X, Y, R, Color.FromArgb(255, 0, 0, rnd.Next(15, 20)), Color.FromArgb(0, 0, 0, 0));
        }
        for (int i = 0; i < amount; i++)
        {
            double positionDiv = 1.98;
            double X1 = rnd.Next(0, 450) / positionDiv;
            double Y1 = rnd.Next(0, 450) / positionDiv;
            double R1 = rnd.Next(300, 650) / 4;
            float R = (float)R1;
            float X = (float)X1;
            float Y = (float)Y1;

            while (X + R > 1004)
            {
                X = 924 - R;
            }
            while (Y + R > 1004)
            {
                Y = 924 - R;
            }
            if(X < 30)
            {
                X = 30;
            }
            if(Y < 30)
            {
                Y = 30;
            }
            DrawGrad(X, Y, R, Color.FromArgb(255, 0, 0, rnd.Next(40, 64)), Color.FromArgb(0, 0, 0, rnd.Next(13, 17)));
        }

Eu só estava me perguntando se alguém conhece algum outro método em c # que poderia criar uma ilha usando ruído perlin? Qualquer conselho seria muito apreciado.

questionAnswers(1)

yourAnswerToTheQuestion