示例#1
0
        private Triangle_dt extendInside(Triangle_dt t, Point_dt p)
        {
            Triangle_dt h1, h2;

            h1 = treatDegeneracyInside(t, p);
            if (h1 != null)
            {
                return(h1);
            }

            h1  = new Triangle_dt(t.c, t.a, p);
            h2  = new Triangle_dt(t.b, t.c, p);
            t.c = p;
            t.circumcircle();
            h1.abnext = t.canext;
            h1.bcnext = t;
            h1.canext = h2;
            h2.abnext = t.bcnext;
            h2.bcnext = h1;
            h2.canext = t;
            h1.abnext.switchneighbors(t, h1);
            h2.abnext.switchneighbors(t, h2);
            t.bcnext = h2;
            t.canext = h1;
            return(t);
        }
示例#2
0
        private void flip(Triangle_dt t, int mc)
        {
            var bkpT = (Triangle_dt)t.Clone();

            Triangle_dt u = t.abnext, v;

            t._mc = mc;
            if (u.halfplane || !u.circumcircle_contains(t.c))
            {
                return;
            }

            if (t.a == u.a)
            {
                v        = new Triangle_dt(u.b, t.b, t.c);
                v.abnext = u.bcnext;
                t.abnext = u.abnext;
            }
            else if (t.a == u.b)
            {
                v        = new Triangle_dt(u.c, t.b, t.c);
                v.abnext = u.canext;
                t.abnext = u.bcnext;
            }
            else if (t.a == u.c)
            {
                v        = new Triangle_dt(u.a, t.b, t.c);
                v.abnext = u.abnext;
                t.abnext = u.canext;
            }
            else
            {
                throw new Exception("Error in flip.");
            }

            v._mc    = mc;
            v.bcnext = t.bcnext;
            v.abnext.switchneighbors(u, v);
            v.bcnext.switchneighbors(t, v);
            t.bcnext = v;
            v.canext = t;
            t.b      = v.a;
            t.abnext.switchneighbors(u, t);
            t.circumcircle();

            currT = v;
            flip(t, mc);
            flip(v, mc);
        }
示例#3
0
        private Triangle_dt extendclock(Triangle_dt t, Point_dt p)
        {
            t.halfplane = false;
            t.c         = p;
            t.circumcircle();

            Triangle_dt tbc = t.bcnext;

            if (p.pointLineTest(tbc.a, tbc.b) >= Point_dt.RIGHT)
            {
                Triangle_dt nT = new Triangle_dt(p, t.b);
                nT.abnext  = t;
                t.bcnext   = nT;
                nT.bcnext  = tbc;
                tbc.canext = nT;
                return(nT);
            }
            return(extendclock(tbc, p));
        }
示例#4
0
        private Triangle_dt extendcounterclock(Triangle_dt t, Point_dt p)
        {
            t.halfplane = false;
            t.c         = p;
            t.circumcircle();

            Triangle_dt tca = t.canext;

            if (p.pointLineTest(tca.a, tca.b) >= Point_dt.RIGHT)
            {
                Triangle_dt nT = new Triangle_dt(t.a, p);
                nT.abnext  = t;
                t.canext   = nT;
                nT.canext  = tca;
                tca.bcnext = nT;
                return(nT);
            }
            return(extendcounterclock(tca, p));
        }
示例#5
0
文件: DT.cs 项目: adiel2012/jdt
        private void flip(Triangle_dt t, int mc)
        {
            var bkpT = (Triangle_dt) t.Clone();

            Triangle_dt u = t.abnext, v;
            t._mc = mc;
            if (u.halfplane || !u.circumcircle_contains(t.c))
                return;

            if (t.a == u.a)
            {
                v = new Triangle_dt(u.b, t.b, t.c);
                v.abnext = u.bcnext;
                t.abnext = u.abnext;
            }
            else if (t.a == u.b)
            {
                v = new Triangle_dt(u.c, t.b, t.c);
                v.abnext = u.canext;
                t.abnext = u.bcnext;
            }
            else if (t.a == u.c)
            {
                v = new Triangle_dt(u.a, t.b, t.c);
                v.abnext = u.abnext;
                t.abnext = u.canext;
            }
            else
            {
                throw new Exception("Error in flip.");
            }

            v._mc = mc;
            v.bcnext = t.bcnext;
            v.abnext.switchneighbors(u, v);
            v.bcnext.switchneighbors(t, v);
            t.bcnext = v;
            v.canext = t;
            t.b = v.a;
            t.abnext.switchneighbors(u, t);
            t.circumcircle();

            currT = v;
            flip(t, mc);
            flip(v, mc);
        }
示例#6
0
文件: DT.cs 项目: adiel2012/jdt
        private Triangle_dt extendInside(Triangle_dt t, Point_dt p)
        {
            Triangle_dt h1, h2;
            h1 = treatDegeneracyInside(t, p);
            if (h1 != null)
                return h1;

            h1 = new Triangle_dt(t.c, t.a, p);
            h2 = new Triangle_dt(t.b, t.c, p);
            t.c = p;
            t.circumcircle();
            h1.abnext = t.canext;
            h1.bcnext = t;
            h1.canext = h2;
            h2.abnext = t.bcnext;
            h2.bcnext = h1;
            h2.canext = t;
            h1.abnext.switchneighbors(t, h1);
            h2.abnext.switchneighbors(t, h2);
            t.bcnext = h2;
            t.canext = h1;
            return t;
        }
示例#7
0
文件: DT.cs 项目: adiel2012/jdt
        private Triangle_dt extendcounterclock(Triangle_dt t, Point_dt p)
        {
            t.halfplane = false;
            t.c = p;
            t.circumcircle();

            Triangle_dt tca = t.canext;

            if (p.pointLineTest(tca.a, tca.b) >= Point_dt.RIGHT)
            {
                Triangle_dt nT = new Triangle_dt(t.a, p);
                nT.abnext = t;
                t.canext = nT;
                nT.canext = tca;
                tca.bcnext = nT;
                return nT;
            }
            return extendcounterclock(tca, p);
        }
示例#8
0
文件: DT.cs 项目: adiel2012/jdt
        private Triangle_dt extendclock(Triangle_dt t, Point_dt p)
        {
            t.halfplane = false;
            t.c = p;
            t.circumcircle();

            Triangle_dt tbc = t.bcnext;

            if (p.pointLineTest(tbc.a, tbc.b) >= Point_dt.RIGHT)
            {
                Triangle_dt nT = new Triangle_dt(p, t.b);
                nT.abnext = t;
                t.bcnext = nT;
                nT.bcnext = tbc;
                tbc.canext = nT;
                return nT;
            }
            return extendclock(tbc, p);
        }