예제 #1
0
        void Triangulate(int n, double size)
        {
            var random = new Random(n);
            var w      = n * size;
            var cdt    = new Cdt(PointsForCdt(random, n, w), null, SegmentsForCdt(w).ToList());

            cdt.Run();
#if TEST_MSAGL && TEST_MSAGL
            CdtSweeper.ShowFront(cdt.GetTriangles(), null, null, null);
#endif
        }
예제 #2
0
        public void InCircleTest()
        {
            var a = new CdtSite(new Point());
            var b = new CdtSite(new Point(2, 0));
            var c = new CdtSite(new Point(1, 2));
            var s = new CdtSite(new Point(1, 1));

            Assert.IsTrue(CdtSweeper.InCircle(s, a, b, c));
            MoveSites(a, b, c, s);
            Assert.IsTrue(CdtSweeper.InCircle(s, a, b, c));
            RotateSites(a, b, c, s);
            Assert.IsTrue(CdtSweeper.InCircle(s, a, b, c));
            a = new CdtSite(new Point());
            b = new CdtSite(new Point(2, 0));
            c = new CdtSite(new Point(1, 2));
            s = new CdtSite(new Point(1, -1));
            Assert.IsTrue(!CdtSweeper.InCircle(s, a, b, c));
            MoveSites(a, b, c, s);
            Assert.IsTrue(!CdtSweeper.InCircle(s, a, b, c));
            RotateSites(a, b, c, s);
            Assert.IsTrue(!CdtSweeper.InCircle(s, a, b, c));
            a = new CdtSite(new Point());
            b = new CdtSite(new Point(1, 0));
            c = new CdtSite(new Point(5, 5));
            s = new CdtSite(new Point(3, 1));
            Assert.IsTrue(CdtSweeper.InCircle(s, a, b, c));
            MoveSites(a, b, c, s);
            Assert.IsTrue(CdtSweeper.InCircle(s, a, b, c));
            RotateSites(a, b, c, s);
            Assert.IsTrue(CdtSweeper.InCircle(s, a, b, c));
            Assert.IsTrue(CdtSweeper.InCircle(s, c, a, b));
            a = new CdtSite(new Point());
            b = new CdtSite(new Point(1, 0));
            c = new CdtSite(new Point(5, 5));
            s = new CdtSite(new Point(4, 1));
            Assert.IsTrue(!CdtSweeper.InCircle(s, a, b, c));
            MoveSites(a, b, c, s);
            Assert.IsTrue(!CdtSweeper.InCircle(s, a, b, c));
            RotateSites(a, b, c, s);
            Assert.IsTrue(!CdtSweeper.InCircle(s, a, b, c));
            a = new CdtSite(new Point());
            b = new CdtSite(new Point(1, 0));
            c = new CdtSite(new Point(5, 5));
            s = new CdtSite(new Point(3, 0.5));
            Assert.IsTrue(!CdtSweeper.InCircle(s, a, b, c));
            MoveSites(a, b, c, s);
            Assert.IsTrue(!CdtSweeper.InCircle(s, a, b, c));
            RotateSites(a, b, c, s);
            Assert.IsTrue(!CdtSweeper.InCircle(s, a, b, c));
            Assert.IsTrue(!CdtSweeper.InCircle(s, c, a, b));
        }
예제 #3
0
        static void Triangulation(bool reverseX)
        {
#if TEST_MSAGL
            DisplayGeometryGraph.SetShowFunctions();
#endif
            int r = reverseX ? -1 : 1;
            IEnumerable <Point> points = Points().Select(p => new Point(r * p.X, p.Y));

            var poly = (Polyline)RussiaPolyline.GetTestPolyline().ScaleFromOrigin(1, 1);
            var cdt  = new Cdt(null, new[] { poly }, null);
            cdt.Run();
#if TEST_MSAGL
            CdtSweeper.ShowFront(cdt.GetTriangles(), null, null, null);
#endif
        }
예제 #4
0
        void TestTriangle(CdtTriangle triangle, Set <CdtSite> usedSites)
        {
            var tsites = triangle.Sites;

            foreach (var site in usedSites)
            {
                if (!tsites.Contains(site))
                {
                    Assert.IsTrue(SeparatedByConstrainedEdge(triangle, site) || !CdtSweeper.InCircle(site, tsites[0], tsites[1], tsites[2]));
//                    {
//                        List<ICurve> redCurves = new List<ICurve>();
//                        redCurves.Add(new Ellipse(2, 2, site.Point));
//                        List<ICurve> blueCurves = new List<ICurve>();
//                        blueCurves.Add(Circumcircle(tsites[0].Point, tsites[1].Point, tsites[2].Point));
//                        ShowFront(Triangles, front, redCurves, blueCurves);
//                    }
                }
            }
        }