public void ZeroSimplexNotEqualsOperator() { var simplexA = new Simplex2D(Vector2.Zero); var simplexB = new Simplex2D(Vector2.One); (simplexA != simplexB).Should().BeTrue(); }
private MapArray <int> GenerateLandMask(MapArray <int> bitmask) { var simplex = new Simplex2D(43); int gbt_radius = (int)Mathf.Max(ChunkOrder, Mathf.Ceil(2.0f * Mathf.Log(1.0f + 1.00f * Radius) / Mathf.Log(7.0f))) - ChunkOrder + 1; for (int i = 0; i < Utils.Pow(7, gbt_radius); i++) { for (int j = 0; j < ChunkSize; j++) { GBTHex hex = new GBTHex(i * ChunkSize + j); Vector2 pos = hex.position; if (GetLandMaskValue(pos, simplex) > Threshold) { bitmask[hex] |= 1; foreach (GBTCorner corner in hex.GetCorners()) { bitmask[corner] |= 1; } } else { bitmask[hex] |= 2; foreach (GBTCorner corner in hex.GetCorners()) { bitmask[corner] |= 2; } } } } return(bitmask); }
public void ZeroSimplexEquals() { var simplexA = new Simplex2D(Vector2.One); var simplexB = new Simplex2D(Vector2.One); simplexA.Equals(simplexB).Should().BeTrue(); }
private float GetLandMaskValue(Vector2 position, Simplex2D noise) { float noise_val = noise.GetFractalNoise(2.0f * position / Radius); float r = position.magnitude / Radius; if (noise_val > max_noise_value) { max_noise_value = noise_val; } return((noise_val * (1.0f - Alpha) + noise_val * Alpha / r) * (1.0f - Mathf.Pow(Utils.Smoothstep(r / 2.0f), 5.0f))); }
public void ZeroSimplexNotEquals() { var simplexA = new Simplex2D(Vector2.Zero); var simplexB = new Simplex2D(Vector2.One); simplexA.Equals(simplexB).Should().BeFalse(); var simplexC = new Simplex2D(Vector2.Zero, Vector2.One); simplexA.Equals(simplexC).Should().BeFalse(); }
public void TwoSimplexNotEqualsOperator() { var simplexA = new Simplex2D(Vector2.One, Vector2.UnitY, Vector2.UnitX); var simplexB = new Simplex2D(Vector2.One, Vector2.Zero, Vector2.UnitX); (simplexA == simplexB).Should().BeFalse(); var simplexC = new Simplex2D(Vector2.One, Vector2.Zero, Vector2.UnitX); var simplexD = new Simplex2D(Vector2.Zero, Vector2.UnitY, Vector2.UnitX); (simplexC == simplexD).Should().BeFalse(); }
public void OneSimplexEqualsOperator() { var simplexA = new Simplex2D(Vector2.One, Vector2.Zero); var simplexB = new Simplex2D(Vector2.One, Vector2.Zero); (simplexA == simplexB).Should().BeTrue(); var simplexC = new Simplex2D(Vector2.One, Vector2.Zero); var simplexD = new Simplex2D(Vector2.Zero, Vector2.One); (simplexC == simplexD).Should().BeTrue(); }
public void OneSimplexEquals() { var simplexA = new Simplex2D(Vector2.One, Vector2.Zero); var simplexB = new Simplex2D(Vector2.One, Vector2.Zero); simplexA.Equals(simplexB).Should().BeTrue(); var simplexC = new Simplex2D(Vector2.One, Vector2.Zero); var simplexD = new Simplex2D(Vector2.Zero, Vector2.One); simplexC.Equals(simplexD).Should().BeTrue(); }
public void TwoSimplexNotEquals() { var simplexA = new Simplex2D(Vector2.One, Vector2.UnitY, Vector2.UnitX); var simplexB = new Simplex2D(Vector2.One, Vector2.Zero, Vector2.UnitX); simplexA.Equals(simplexB).Should().BeFalse(); var simplexC = new Simplex2D(Vector2.One, Vector2.Zero, Vector2.UnitX); var simplexD = new Simplex2D(Vector2.Zero, Vector2.UnitY, Vector2.UnitX); simplexC.Equals(simplexD).Should().BeFalse(); var simplexE = new Simplex2D(Vector2.Zero); simplexA.Equals(simplexE).Should().BeFalse(); }
public void TwoSimplexEquals() { var simplexA = new Simplex2D(Vector2.One, Vector2.Zero, Vector2.UnitX); var simplexB = new Simplex2D(Vector2.One, Vector2.Zero, Vector2.UnitX); simplexA.Equals(simplexB).Should().BeTrue(); var simplexC = new Simplex2D(Vector2.Zero, Vector2.One, Vector2.UnitX); simplexA.Equals(simplexC).Should().BeTrue(); var simplexD = new Simplex2D(Vector2.UnitX, Vector2.Zero, Vector2.One); simplexA.Equals(simplexD).Should().BeTrue(); var simplexE = new Simplex2D(Vector2.One, Vector2.UnitX, Vector2.Zero); simplexA.Equals(simplexE).Should().BeTrue(); var simplexF = new Simplex2D(Vector2.Zero, Vector2.UnitX, Vector2.One); simplexA.Equals(simplexF).Should().BeTrue(); }
public LGJKStrategy2D() { simplex = new Simplex2D(); epa = new EPA2D(); safety = new List <EPAFace2D>(); }
private List <RiverNode> GenerateDownslopes(MapArray <int> bitmask) { var simplex = new Simplex2D(52562); MapArray <float> weights = new MapArray <float>(1000.0f); var rivernet = new List <RiverNode>(); var node_lookup = new Dictionary <GBTCorner, RiverNode>(); var queue = new BinaryMinHeap <QueueElement <RiverNode> >(); // Assign weights to each land vertex and add coast vertices to the queue. foreach (KeyValuePair <GBTCorner, int> kvp in bitmask.GetCornerEnumerator()) { if ((kvp.Value & 1) > 0) { weights[kvp.Key] = simplex.GetFractalNoise(4.0f * kvp.Key.position / Radius); if ((kvp.Value & 2) > 0) { RiverNode node = new RiverNode(kvp.Key); queue.Push(new QueueElement <RiverNode>(weights[kvp.Key], node)); rivernet.Add(node); node_lookup[kvp.Key] = node; } } } while (queue.Count > 0) { RiverNode node = queue.Pop().value; GBTCorner lowest = new GBTCorner(-1); float lowest_weight = 999.0f; // Find the neighboring land node with the lowest weight which has not already // been added to the network. foreach (GBTCorner adjacent in node.Vertex.GetAdjacent()) { if (CheckValidAdjacent(node, adjacent, bitmask, node_lookup) && weights[adjacent] < lowest_weight) { lowest_weight = weights[adjacent]; lowest = adjacent; } } // Add the lowest node to the network, and push it and the into the queue. if (lowest.isValid()) { var new_node = new RiverNode(lowest); new_node.Downslope = node; if (node.Left == null) { node.Left = new_node; // If the node hasn't been filled, add it to the queue again, but with a lower weight. weights[node.Vertex] += 0.05f; queue.Push(new QueueElement <RiverNode>(weights[node.Vertex], node)); } else if (node.Right == null) { node.Right = new_node; } node_lookup[lowest] = new_node; queue.Push(new QueueElement <RiverNode>(weights[lowest], new_node)); } } return(rivernet); }