public Array2D(Array2D arr) { if (arr == null || arr.Array == null) return; this.Array = new float[arr.Array.Length]; this.nx = arr.Nx; this.nz = arr.Nz; Buffer.BlockCopy(arr.Array, 0, this.Array, 0, this.Array.Length*4); }
/// <summary> /// shifts all the elements... /// </summary> /// <param name="offsetX"></param> /// <param name="offsetY"></param> public void Shift(int offsetX, int offsetZ) { Array2D orig = new Array2D(this); for (int i = 0; i < this.nx; ++i) { for (int j = 0; j < this.nz; ++j) { int i0 = (i + offsetX) % this.nx; int j0 = (j + offsetZ) % this.nz; this.SetAt(i0, j0, orig.GetAt(i, j)); } } }
/// <summary> /// Creates 2D array from mathematical function /// </summary> /// <param name="nx"></param> /// <param name="ny"></param> /// <param name="yScale"></param> /// <returns></returns> public static Array2D CreateArray(int nx, int nz, Function func) { Array2D arr = new Array2D(nx, nz); if(func == null) return arr; for (int xx = 0; xx < nx; xx++) { for (int zz = 0; zz < nz; zz++) { arr.Array[xx + zz * nx] = func(xx, zz, arr); } } return arr; }