Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        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);
        }
Exemple #10
0
        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);
        }
Exemple #11
0
        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);
        }
Exemple #12
0
        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))));
        }
Exemple #13
0
        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)));*/
        }