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; } } }
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); }
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; } } }