public void TestTupleCells() { VoronoiWrapper vw = new VoronoiWrapper(); vw.AddSegment(0, 0, 0, 10); vw.AddSegment(0, 10, 10, 10); vw.AddSegment(10, 10, 10, 0); vw.AddSegment(10, 0, 0, 0); vw.AddSegment(0, 0, 5, 5); vw.AddSegment(5, 5, 10, 10); vw.ConstructVoronoi(); List<Tuple<double, double>> vertices = vw.GetVertices(); List<Tuple<int, int, int, int, Tuple<bool, bool, bool, int, int>>> edges = vw.GetEdges(); List<Tuple<int, int, bool, bool, List<int>, bool, short>> cells = vw.GetCells(); for (int i = 0; i < vertices.Count; i++) { TestContext.WriteLine(String.Format("Vertex {0}. X: {1}, Y: {2}", i, vertices[i].Item1, vertices[i].Item2)); } foreach (var c in cells) { foreach (var s in c.Item5) { TestContext.WriteLine(String.Format("Cell: {0}, Segment: {1}, Start: {2}, End: {3}", c.Item1, s, edges[s].Item2, edges[s].Item3)); } } Assert.AreEqual(11, cells.Count); }
public void TestCellEndNodes() { VoronoiWrapper vw = new VoronoiWrapper(); vw.AddSegment(0, 0, 0, 10); vw.AddSegment(0, 10, 10, 10); vw.AddSegment(10, 10, 10, 0); vw.AddSegment(10, 0, 0, 0); vw.AddSegment(0, 0, 5, 5); vw.AddSegment(5, 5, 10, 10); vw.ConstructVoronoi(); List<Tuple<double, double>> vertices = vw.GetVertices(); List<Tuple<int, int, int, int, Tuple<bool, bool, bool, int, int>>> edges = vw.GetEdges(); List<Tuple<int, int, bool, bool, List<int>, bool, short>> cells = vw.GetCells(); foreach (var c in cells) { //Get first edge and last edge Tuple<int, int, int, int, Tuple<bool, bool, bool, int, int>> firstEdge = edges[c.Item5[0]]; Tuple<int, int, int, int, Tuple<bool, bool, bool, int, int>> lastEdge = edges[c.Item5[c.Item5.Count -1]]; Assert.AreEqual(firstEdge.Item2, lastEdge.Item3); } }
public void TestVerticesSequence() { List<Segment> input = new List<Segment>(); input.Add(new Segment(0, 0, 0, 10)); input.Add(new Segment(0, 10, 10, 10)); input.Add(new Segment(10, 10, 10, 0)); input.Add(new Segment(10, 0, 0, 0)); input.Add(new Segment(0, 0, 5, 5)); input.Add(new Segment(5, 5, 10, 10)); //Build the CLR voronoi VoronoiWrapper vw = new VoronoiWrapper(); foreach (var s in input) vw.AddSegment(s.Start.X, s.Start.Y, s.End.X, s.End.Y); vw.ConstructVoronoi(); List<Tuple<double, double>> clrVertices = vw.GetVertices(); //Build the C# Voronoi BoostVoronoi bv = new BoostVoronoi(); foreach (var s in input) bv.AddSegment(s.Start.X, s.Start.Y, s.End.X, s.End.Y); bv.Construct(); List<Vertex> sharpVertices = bv.Vertices; //Test that the outputs have the same length Assert.AreEqual(clrVertices.Count, sharpVertices.Count); for (int i = 0; i < sharpVertices.Count; i++) { Assert.AreEqual(clrVertices[i].Item1, sharpVertices[i].X); Assert.AreEqual(clrVertices[i].Item2, sharpVertices[i].Y); } }
public void TestVertexSequences() { VoronoiWrapper vw = new VoronoiWrapper(); vw.AddSegment(0, 0, 0, 10); vw.AddSegment(0, 10, 10, 10); vw.AddSegment(10, 10, 10, 0); vw.AddSegment(10, 0, 0, 0); vw.AddSegment(0, 0, 5, 5); vw.AddSegment(5, 5, 10, 10); vw.ConstructVoronoi(); List<Tuple<double, double>> vertices = vw.GetVertices(); List<Tuple<int, int, int, int, Tuple<bool, bool, bool, int, int>>> edges = vw.GetEdges(); List<Tuple<int, int, bool, bool, List<int>, bool, short>> cells = vw.GetCells(); foreach (var c in cells) { for (int i = 1; i < c.Item5.Count; i++) { Assert.AreEqual(edges[c.Item5[i - 1]].Item3, edges[c.Item5[i]].Item2); } } }
public void TestTupleVertices() { VoronoiWrapper vw = new VoronoiWrapper(); vw.AddSegment(0, 0, 0, 10); vw.AddSegment(0, 10, 10, 10); vw.AddSegment(10, 10, 10, 0); vw.AddSegment(10, 0, 0, 0); vw.AddSegment(0, 0, 5, 5); vw.AddSegment(5, 5, 10, 10); vw.ConstructVoronoi(); List<Tuple<double, double>> vertices = vw.GetVertices(); Assert.AreEqual(6, vertices.Count); }
public void TestTupleVertexIndexes() { VoronoiWrapper vw = new VoronoiWrapper(); vw.AddSegment(0, 0, 0, 10); vw.AddSegment(0, 10, 10, 10); vw.AddSegment(10, 10, 10, 0); vw.AddSegment(10, 0, 0, 0); vw.AddSegment(0, 0, 5, 5); vw.AddSegment(5, 5, 10, 10); vw.ConstructVoronoi(); List<Tuple<double, double>> vertices = vw.GetVertices(); List<Tuple<int, int, int, int, Tuple<bool, bool, bool, int, int>>> edges = vw.GetEdges(); List<int> vertexIndexes = new List<int>(); foreach (var e in edges) { if(!vertexIndexes.Exists(v=> v==e.Item2)) vertexIndexes.Add(e.Item2); if (!vertexIndexes.Exists(v => v == e.Item3)) vertexIndexes.Add(e.Item3); } vertexIndexes.Remove(-1); vertexIndexes.Sort(); int minIndex = vertexIndexes.Min(); int maxIndex = vertexIndexes.Max(); Assert.AreEqual(0, minIndex); Assert.AreEqual(vertices.Count - 1, maxIndex); }