public NoiseGenerator(long seed, double persistence, int levels, int[] size, bool smooth, Interpolation interpolation) { this.seed = seed; if (persistence < 0.0 || persistence > 1.0) { throw new ArgumentOutOfRangeException(nameof(persistence)); } this.persistence = persistence; if (levels <= 0) { throw new ArgumentOutOfRangeException(nameof(levels)); } this.levels = levels; this.persistences = Enumerable.Range(0, this.levels) .Select(l => Math.Pow(persistence, l)) .ToArray(); this.scale = this.persistences.Sum(); this.smooth = smooth; if (size == null) { throw new ArgumentNullException(nameof(size)); } else if (size.Length == 0) { throw new ArgumentOutOfRangeException(nameof(size)); } this.size = Array.ConvertAll(size, s => s); this.dimensions = this.size.Length; this.levelSizes = new int[this.levels][]; for (var level = 0; level < this.levels; level++) { this.levelSizes[level] = new int[this.dimensions]; for (var i = 0; i < this.dimensions; i++) { this.levelSizes[level][i] = this.size[i] * (1 << level); } } this.interpolation = interpolation ?? throw new ArgumentNullException(nameof(interpolation)); this.levelsCache = new SplayTreeDictionary <long[], Array[]>(CacheKeyComparer.Instance); }
public TiedList(SplayTreeDictionary <TKey, TValue> tree, int version, IList <T> backingList) { this.tree = tree ?? throw new ArgumentNullException(nameof(tree)); this.version = version; this.backingList = backingList ?? throw new ArgumentNullException(nameof(backingList)); }