Esempio n. 1
0
        private void square(Layer2DObject layer, int size, float ap, int depth, IRandom2 rand)
        {
            int squareSize     = (int)(size * JryMath.Pow(.5f, depth));
            int squareHalfSize = (int)(squareSize / 2);

            for (int iy = 0; iy < JryMath.Pow(2, depth); iy++)
            {
                for (int ix = 0; ix < JryMath.Pow(2, depth); ix++)
                {
                    var xCorL = ix * squareSize;
                    var xCorR = (ix + 1) * squareSize;
                    var yCorT = iy * squareSize;
                    var yCorB = (iy + 1) * squareSize;

                    var tl  = layer[xCorL, yCorT].Value;
                    var bl  = layer[xCorL, yCorB].Value;
                    var tr  = layer[xCorR, yCorT].Value;
                    var br  = layer[xCorR, yCorB].Value;
                    int xph = xCorL + squareHalfSize;
                    int yph = yCorT + squareHalfSize;
                    var c   = (tl + tr + br + bl) / 4 + rnd(rand, xph, yph) * ap;
                    var b   = (br + bl + c + getClipped(layer, xph, yph + squareSize)) / 4 + rnd(rand, xph, yph + squareSize) * ap;
                    var t   = (tr + tl + c + getClipped(layer, xph, yph - squareSize)) / 4 + rnd(rand, xph, yph - squareSize) * ap;
                    var r   = (tr + br + c + getClipped(layer, xph + squareSize, yph)) / 4 + rnd(rand, xph + squareSize, yph) * ap;
                    var l   = (tl + bl + c + getClipped(layer, xph - squareSize, yph)) / 4 + rnd(rand, xph - squareSize, yph) * ap;

                    layer[xph, yCorT] = t;
                    layer[xph, yCorB] = b;
                    layer[xCorL, yph] = l;
                    layer[xCorR, yph] = r;
                }
            }
        }
Esempio n. 2
0
        public ILayerMasked Do(INoiseParameters param, Vector2 size)
        {
            var dt = DateTime.Now.Millisecond;

            System.Diagnostics.Debug.Print(dt + "Rand" + _rand.NextD(1, 2));

            var           pow      = (int)JryMath.Max(JryMath.Ceil(JryMath.Log(size.X, 2)), JryMath.Ceil(JryMath.Log(size.Y, 2)));
            int           sizePow2 = (int)JryMath.Pow(2, pow) + 1;
            Layer2DObject layer    = new Layer2DObject(sizePow2, sizePow2);

            setupBaseDS(sizePow2, layer, _rand);
            var par = param.BaseAmplitude * param.Amplitude;

            ds(layer, sizePow2, par, param, _rand);


            var croped = new Layer2DObject(size);

            for (int y = 0; y < size.Y; y++)
            {
                for (int x = 0; x < size.X; x++)
                {
                    croped[x, y] = layer[x, y];
                }
            }
            return(croped);
        }
Esempio n. 3
0
        private void diamond(ILayer layer, int size, float ap, int l, IRandom2 rand)
        {
            int squareSize     = (int)(size * JryMath.Pow(.5f, l));
            int squareHalfSize = (int)(squareSize / 2);

            for (int iy = 0; iy < JryMath.Pow(2, l); iy++)
            {
                for (int ix = 0; ix < JryMath.Pow(2, l); ix++)
                {
                    var xCorL = ix * squareSize;
                    var xCorR = (ix + 1) * squareSize;
                    var yCorT = iy * squareSize;
                    var yCorB = (iy + 1) * squareSize;

                    var tl  = layer[xCorL, yCorT].Value;
                    var bl  = layer[xCorL, yCorB].Value;
                    var tr  = layer[xCorR, yCorT].Value;
                    var br  = layer[xCorR, yCorB].Value;
                    int xph = xCorL + squareHalfSize;
                    int yph = yCorT + squareHalfSize;
                    var c   = (tl + tr + br + bl) / 4 + rnd(rand, xph, yph) * ap;
                    layer[xph, yph] = c;
                }
            }
        }