public void BuildAndRefactorOneSimpliceInTwoSimplices_2D() { IVoronoiDelunayGraph gdv = createNewVoronoiDiagram(2); IVoronoiRegion reg = gdv.AddNewPoint("Cordoba", new double[] { 20, 5 }); CheckGeneralDiagramCoherence(gdv); Assert.IsTrue(gdv.Simplices.Count() == 1); IVoronoiRegion regB = gdv.AddNewPoint("Huelva", new double[] { 1, 1 }); CheckGeneralDiagramCoherence(gdv); Assert.IsTrue(gdv.Simplices.Count() == 1); IVoronoiRegion regC = gdv.AddNewPoint("Cadiz", new double[] { 40, 1 }); CheckGeneralDiagramCoherence(gdv); Assert.IsTrue(gdv.Simplices.Count() == 1); IVoronoiRegion regD = gdv.AddNewPoint("Sevilla", new double[] { 10, -10 }); CheckGeneralDiagramCoherence(gdv); Assert.IsTrue(gdv.Simplices.Count() == 2); Assert.IsTrue(gdv.VoronoiRegions.Count() == 4); Assert.IsTrue(gdv.VoronoiVertexes.Count() == 6); Assert.IsTrue(regD.Nuclei.Simplices.Count() == 2); Assert.IsTrue(reg.Nuclei.Simplices.Count() == 2); Assert.IsTrue(regB.Nuclei.Simplices.Count() == 1); Assert.IsTrue(regC.Nuclei.Simplices.Count() == 1); CheckGeneralDiagramCoherence(gdv); }
public void BasicVoronoiAddFour() { IVoronoiDelunayGraph gdv = createNewVoronoiDiagram(4); IVoronoiRegion reg = gdv.AddNewPoint(new double[] { 10, 3, 45, 2 }); IVoronoiRegion regB = gdv.AddNewPoint(new double[] { 10, 50, 45, 50 }); IVoronoiRegion regC = gdv.AddNewPoint(new double[] { 10, 50, -45, -1 }); IVoronoiRegion regD = gdv.AddNewPoint(new double[] { 10, 0, -45, -21 }); Assert.AreEqual(gdv.VoronoiRegions.Count(), 4); Assert.IsTrue(gdv.VoronoiRegions.Contains(reg)); Assert.IsTrue(gdv.VoronoiRegions.Contains(regB)); Assert.IsTrue(gdv.VoronoiRegions.Contains(regC)); Assert.IsTrue(gdv.VoronoiRegions.Contains(regD)); Assert.AreEqual(reg.NeighbourgRegions.Count(), 3); Assert.IsTrue(reg.IsInfiniteRegion); Assert.AreEqual(regB.NeighbourgRegions.Count(), 3); Assert.IsTrue(regB.IsInfiniteRegion); Assert.AreEqual(regC.NeighbourgRegions.Count(), 3); Assert.IsTrue(regC.IsInfiniteRegion); Assert.AreEqual(regD.NeighbourgRegions.Count(), 3); Assert.IsTrue(regD.IsInfiniteRegion); CheckGeneralDiagramCoherence(gdv); }
public void BasicVoronoiAddOne_RegionBasicFunctionality() { IVoronoiDelunayGraph gdv = createNewVoronoiDiagram(4); IVoronoiRegion reg = gdv.AddNewPoint(new double[] { 10, 3, 45, 2 }); Assert.IsTrue(reg.ContainsPoint(new double[] { 1, 2, 3, 4 })); CheckGeneralDiagramCoherence(gdv); }
public void BuildAllwaisOutsideCircumpsferes_5nucleis() { IVoronoiDelunayGraph gdv = createNewVoronoiDiagram(2); IVoronoiRegion cordoba = gdv.AddNewPoint("Cordoba", new double[] { 20, 5 }); CheckGeneralDiagramCoherence(gdv); IVoronoiRegion huelva = gdv.AddNewPoint("Huelva", new double[] { 1, 1 }); CheckGeneralDiagramCoherence(gdv); IVoronoiRegion sevilla = gdv.AddNewPoint("Sevilla", new double[] { 10, -10 }); CheckGeneralDiagramCoherence(gdv); IVoronoiRegion cadiz = gdv.AddNewPoint("Cadiz", new double[] { 5, -13 }); CheckGeneralDiagramCoherence(gdv); Assert.IsTrue(!sevilla.Nuclei.BelongConvexHull); Assert.IsTrue(cadiz.Nuclei.BelongConvexHull); Assert.IsTrue(huelva.Nuclei.BelongConvexHull); Assert.IsTrue(cordoba.Nuclei.BelongConvexHull); IVoronoiRegion malaga = gdv.AddNewPoint("Malaga", new double[] { 20, -20 }); CheckGeneralDiagramCoherence(gdv); Assert.AreEqual(gdv.VoronoiRegions.Count(), 5); Assert.AreEqual(gdv.Simplices.Count(), 4); Assert.AreEqual(gdv.VoronoiVertexes.Count(), 8); Assert.AreEqual(gdv.VoronoiVertexes.Count(v => v.Infinity), 4); Assert.IsFalse(huelva.NeighbourgRegions.Contains(malaga)); Assert.IsFalse(malaga.NeighbourgRegions.Contains(huelva)); Assert.IsFalse(cordoba.NeighbourgRegions.Contains(cadiz)); Assert.IsFalse(cadiz.NeighbourgRegions.Contains(cordoba)); Assert.AreEqual(sevilla.Nuclei.Simplices.Count(), 4); Assert.AreEqual(cordoba.Nuclei.Simplices.Count(), 2); Assert.AreEqual(huelva.Nuclei.Simplices.Count(), 2); Assert.AreEqual(malaga.Nuclei.Simplices.Count(), 2); foreach (INuclei sevillaNeighbour in sevilla.Nuclei.Neighbourgs) { IEnumerable <ISimpliceFacet> facet = gdv.GetFacetOrNull(sevilla.Nuclei, sevillaNeighbour); Assert.AreEqual(2, facet.Count()); Assert.IsTrue(facet.All(f => !f.IsConvexHullFacet)); } CheckGeneralDiagramCoherence(gdv); }
public void BasicVoronoiAddTwo_BasicFunctionality() { IVoronoiDelunayGraph gdv = createNewVoronoiDiagram(4); IVoronoiRegion reg = gdv.AddNewPoint(new double[] { 10, 3, 45, 2 }); IVoronoiRegion regB = gdv.AddNewPoint(new double[] { 10, 50, 45, 50 }); double[] testingPoint = new double[] { 10, 4, 43, 0 }; Assert.IsTrue(reg.ContainsPoint(testingPoint)); Assert.IsFalse(regB.ContainsPoint(testingPoint)); Assert.AreEqual(gdv.GetMatchingRegion(testingPoint), reg); CheckGeneralDiagramCoherence(gdv); }
public void BasicVoronoiAddOne() { IVoronoiDelunayGraph gdv = createNewVoronoiDiagram(4); IVoronoiRegion reg = gdv.AddNewPoint(new double[] { 10, 3, 45, 2 }); Assert.AreEqual(gdv.VoronoiRegions.Count(), 1); Assert.AreEqual(gdv.VoronoiRegions.Single(), reg); Assert.IsFalse(reg.NeighbourgRegions.Any()); Assert.IsTrue(reg.Nuclei.BelongConvexHull); CheckGeneralDiagramCoherence(gdv); }
public void BuildOneSimplice_AndCheckVoronoiFeatures_2D() { IVoronoiDelunayGraph gdv = createNewVoronoiDiagram(2); IVoronoiRegion reg = gdv.AddNewPoint("Cordoba", new double[] { 20, 5 }); IVoronoiRegion regB = gdv.AddNewPoint("Huelva", new double[] { 1, 1 }); IVoronoiRegion regC = gdv.AddNewPoint("Cadiz", new double[] { 40, 1 }); double[] testingPoint = new double[] { 4, 4 }; Assert.IsTrue(gdv.VoronoiVertexes.Count() == 1); Assert.IsTrue(gdv.VoronoiRegions.All(r => r.Vertexes.Count() == 1)); CheckGeneralDiagramCoherence(gdv); }
public MainClass() { InitializeComponent(); this.WindowState = System.Windows.Forms.FormWindowState.Maximized; voronoi = new ndvoronoisharp.Bowyer.BowyerVoronoiDelunayGraph(2); int sample_count = 0; Random r = new Random(); for (int i = 0; i < sample_count; i++) { double[] newPoint = new double[] { r.NextDouble() *this.Width, r.NextDouble() *this.Height }; voronoi.AddNewPoint(newPoint); } this.Paint += paint_event; this.MouseDown += new MouseEventHandler(MainClass_MouseDown); }
public MainClass() { InitializeComponent(); this.WindowState = System.Windows.Forms.FormWindowState.Maximized; voronoi = new ndvoronoisharp.Bowyer.BowyerVoronoiDelunayGraph(2); int sample_count = 0; Random r = new Random(); for (int i = 0; i < sample_count; i++) { double[] newPoint = new double[] { r.NextDouble() * this.Width, r.NextDouble() * this.Height }; voronoi.AddNewPoint(newPoint); } this.Paint += paint_event; this.MouseDown += new MouseEventHandler(MainClass_MouseDown); }
public void BasicVoronoiAddThree() { IVoronoiDelunayGraph gdv = createNewVoronoiDiagram(4); IVoronoiRegion reg = gdv.AddNewPoint(new double[] { 10, 3, 45, 2 }); IVoronoiRegion regB = gdv.AddNewPoint(new double[] { 10, 50, 45, 50 }); IVoronoiRegion regC = gdv.AddNewPoint(new double[] { 10, 50, -45, -1 }); Assert.AreEqual(gdv.VoronoiRegions.Count(), 3); Assert.AreEqual(gdv.Simplices.Count(s => s.Rank == 2), 1); Assert.IsTrue(gdv.Simplices.Single().Facets.All(f => f.semiHyperSpaceMatch(gdv.Simplices.Single().VoronoiVertex.Coordinates))); Assert.IsTrue(!gdv.Simplices.Any(s => s.Rank > 2)); Assert.IsTrue(gdv.VoronoiRegions.Contains(reg)); Assert.IsTrue(gdv.VoronoiRegions.Contains(regB)); Assert.IsTrue(gdv.VoronoiRegions.Contains(regC)); Assert.AreEqual(reg.NeighbourgRegions.Count(), 2); Assert.IsTrue(reg.IsInfiniteRegion); Assert.AreEqual(reg.Vertexes.Count(), 3); Assert.AreEqual(reg.Vertexes.Count(v => v.Infinity), 2); Assert.AreEqual(reg.Facets.Count(), 2); Assert.IsTrue(reg.Facets.All(f => f.semiHyperSpaceMatch(reg.Nuclei.Coordinates))); Assert.AreEqual(regB.NeighbourgRegions.Count(), 2); Assert.IsTrue(regB.IsInfiniteRegion); Assert.AreEqual(regB.Vertexes.Count(), 3); Assert.AreEqual(regB.Vertexes.Count(v => v.Infinity), 2); Assert.AreEqual(regB.Facets.Count(), 2); Assert.IsTrue(regB.Facets.All(f => f.semiHyperSpaceMatch(regB.Nuclei.Coordinates))); Assert.AreEqual(regC.NeighbourgRegions.Count(), 2); Assert.IsTrue(regC.IsInfiniteRegion); Assert.AreEqual(regC.Vertexes.Count(), 3); Assert.AreEqual(regC.Vertexes.Count(v => v.Infinity), 2); Assert.AreEqual(regC.Facets.Count(), 2); Assert.IsTrue(regC.Facets.All(f => f.semiHyperSpaceMatch(regC.Nuclei.Coordinates))); CheckGeneralDiagramCoherence(gdv); }
public void BuildOneSimplice_2D() { IVoronoiDelunayGraph gdv = createNewVoronoiDiagram(2); IVoronoiRegion reg = gdv.AddNewPoint("Cordoba", new double[] { 20, 5 }); IVoronoiRegion regB = gdv.AddNewPoint("Huelva", new double[] { 1, 1 }); IVoronoiRegion regC = gdv.AddNewPoint("Cadiz", new double[] { 40, 1 }); double[] testingPoint = new double[] { 4, 4 }; Assert.IsFalse(reg.ContainsPoint(testingPoint)); Assert.True(regB.ContainsPoint(testingPoint)); Assert.IsFalse(regC.ContainsPoint(testingPoint)); Assert.AreEqual(gdv.GetMatchingRegion(testingPoint), regB); Assert.IsTrue(gdv.Nucleis.All(n => n.BelongConvexHull)); Assert.IsTrue(gdv.Simplices.Count() == 1); Assert.IsTrue(gdv.Simplices.Single().Nucleis.Intersect(gdv.Nucleis).Count() == 3); Assert.IsTrue(gdv.Nucleis.All(n => n.Simplices.Contains(gdv.Simplices.Single()))); CheckGeneralDiagramCoherence(gdv); }
public void CheckGeneralDiagramCoherence(IVoronoiDelunayGraph diagram) { Assert.IsTrue(diagram.Simplices.All(s => s.Rank == diagram.Simplices.Max(s2 => s2.Rank))); Assert.IsTrue(diagram.Simplices.All(s => s.Facets.Count() == s.Rank + 1)); Assert.IsTrue(diagram.VoronoiVertexes.Where(v => v.Infinity).All(v => v.Simplice.Facets.Count() == 1)); Assert.IsTrue(diagram.Simplices.All(s => s.Facets.All(f => f.Rank + 1 == s.Rank))); Assert.IsTrue(diagram.Nucleis.All(n => n.VoronoiHyperRegion.Facets.All(f => f.semiHyperSpaceMatch(n.Coordinates)))); Assert.IsTrue(diagram.Simplices.All(s => s.Facets.All(f => f.Owner == s.VoronoiVertex))); if (diagram.Rank > 0) { Assert.IsTrue(diagram.Simplices.All(s => s.Facets.Where(f => f.IsConvexHullFacet).All(f => f.External.Infinity))); } Assert.IsTrue(diagram.Simplices.All(s => s.Facets.Where(f => f.IsConvexHullFacet).All(f => f.Nucleis.All(n => n.BelongConvexHull)))); Assert.IsTrue(diagram.Simplices.All(s => s.Facets.Where(f => !f.IsConvexHullFacet).All(f => !f.External.Infinity))); Assert.IsTrue(diagram.VoronoiRegions.Where(r => r.IsInfiniteRegion).All(r => r.Nuclei.BelongConvexHull)); Assert.IsTrue(diagram.Simplices.All(s => diagram.Nucleis.Except(s.Nucleis).All(n => !s.CircumsphereContains(n.Coordinates)))); }
public void SameLinePoints4D() { IVoronoiDelunayGraph gdv = createNewVoronoiDiagram(4); IVoronoiRegion reg = gdv.AddNewPoint("a", new double[] { 10, 0, 45, 2 }); CheckGeneralDiagramCoherence(gdv); IVoronoiRegion regB = gdv.AddNewPoint("b", new double[] { 10, 0, 45, 50 }); CheckGeneralDiagramCoherence(gdv); IVoronoiRegion regC = gdv.AddNewPoint("c", new double[] { 10, 0, 45, -1 }); CheckGeneralDiagramCoherence(gdv); Assert.AreEqual(gdv.Simplices.Count(), 2); Assert.AreEqual(gdv.VoronoiVertexes.Count(), 4); Assert.IsTrue(gdv.VoronoiVertexes.Count(v => v.Infinity) == 2); IVoronoiRegion regD = gdv.AddNewPoint("d", new double[] { 10, 0, 45, -21 }); CheckGeneralDiagramCoherence(gdv); Assert.AreEqual(gdv.VoronoiRegions.Count(), 4); Assert.AreEqual(gdv.Simplices.Count(), 3); Assert.AreEqual(gdv.VoronoiVertexes.Count(), 5); Assert.IsTrue(gdv.VoronoiVertexes.Count(v => v.Infinity) == 2); Assert.IsTrue(gdv.Simplices.All(s => s.Rank == 1)); CheckGeneralDiagramCoherence(gdv); /* * Assert.AreEqual(gdv.Simplices.Count(s => s.Dimensionality == 2), 1); * Assert.IsTrue(gdv.Simplices.Single().Facets.All(f => f.semiHyperSpaceMatch(gdv.Simplices.Single().VoronoiVertex.Coordinates))); * Assert.IsTrue(!gdv.Simplices.Any(s => s.Dimensionality > 2)); * * Assert.IsTrue(gdv.VoronoiRegions.Contains(reg)); * Assert.IsTrue(gdv.VoronoiRegions.Contains(regB)); * Assert.IsTrue(gdv.VoronoiRegions.Contains(regC)); * * Assert.AreEqual(reg.NeighbourgRegions.Count(), 2); * Assert.IsTrue(reg.IsInfiniteRegion); * Assert.AreEqual(reg.Vertexes.Count(), 3); * Assert.AreEqual(reg.Vertexes.Count(v => v.Infinity), 2); * Assert.AreEqual(reg.Facets.Count(), 2); * Assert.IsTrue(reg.Facets.All(f => f.semiHyperSpaceMatch(reg.Nuclei.Coordinates))); * * Assert.AreEqual(regB.NeighbourgRegions.Count(), 2); * Assert.IsTrue(regB.IsInfiniteRegion); * Assert.AreEqual(regB.Vertexes.Count(), 3); * Assert.AreEqual(regB.Vertexes.Count(v => v.Infinity), 2); * Assert.AreEqual(regB.Facets.Count(), 2); * Assert.IsTrue(regB.Facets.All(f => f.semiHyperSpaceMatch(regB.Nuclei.Coordinates))); * * Assert.AreEqual(regC.NeighbourgRegions.Count(), 2); * Assert.IsTrue(regC.IsInfiniteRegion); * Assert.AreEqual(regC.Vertexes.Count(), 3); * Assert.AreEqual(regC.Vertexes.Count(v => v.Infinity), 2); * Assert.AreEqual(regC.Facets.Count(), 2); * Assert.IsTrue(regC.Facets.All(f => f.semiHyperSpaceMatch(regC.Nuclei.Coordinates)));*/ }