Exemplo n.º 1
0
        public bool Test_l_l(LinkList <LINE> ll, PO p0)
        {
            //对边链进行检测,以发现不合理的边链,合理 true,不合理 false
            util        u1 = new util();
            Node <LINE> ln = ll.Head;
            float       ag0, ag1, ag2;
            int         num  = 0;
            int         num1 = 0;

            ag0 = u1.CalAgl(p0, ln.Data.getanotherpo(p0));
            ag2 = ag0;
            ln  = ln.Next;
            while (ln != null)
            {
                ag1 = u1.CalAgl(p0, ln.Data.getanotherpo(p0));
                if (ag1 > ag0)
                {
                    ag0 = ag1;
                }
                else
                {
                    ag0 = ag1;
                    num++;
                }
                if (ag1 < ag2)
                {
                    ag2 = ag1;
                }
                else
                {
                    ag2 = ag1;
                    num1++;
                }
                ln = ln.Next;
            }
            if (num >= 2 && num1 >= 2)
            {
                return(false);
            }
            return(true);
        }
Exemplo n.º 2
0
        public override void Generate_eadge()
        {
            util  u1 = new util();
            float yita, rx;
            int   id, isita;
            PO    ptmp, pc;
            PO    pk;

            edge_pl.Clear();
            pc   = new PO();
            pc.x = (l0.p1.x + l0.p2.x) / 2;
            pc.y = (l0.p1.y + l0.p2.y) / 2;
            yita = (float)System.Math.Pow((ro * 1.2f) / ri, 1.0 / (nr - 1));
            rx   = (float)(ri * System.Math.Pow(yita, nr - 1));
            for (isita = 0; isita <= nsta / 2; isita++)
            {
                ptmp   = new PO();
                ptmp.x = (float)(l0.p1.x + rx * System.Math.Cos(2 * 3.1415926 * isita / nsta + u1.CalAgl(l0.p1, l0.p2) + 3.1415926 / 2));
                ptmp.y = (float)(l0.p1.y + rx * System.Math.Sin(2 * 3.1415926 * isita / nsta + u1.CalAgl(l0.p1, l0.p2) + 3.1415926 / 2));
                edge_pl.Insert(ptmp);
            }
            //for (id = 0; id <= nd - 1; id++)
            //{
            //    ptmp = new PO();
            //    ptmp.x = ((nd - 1 - id) * l0.p1.x + id * l0.p2.x) / (nd - 1);
            //    ptmp.y = ((nd - 1 - id) * l0.p1.y + id * l0.p2.y) / (nd - 1);
            //    pk = u1.po_vertical(ptmp, l0.p1, l0.p2, rx);
            //    edge_pl.Insert(pk);
            //}
            for (isita = 0; isita <= nsta / 2; isita++)
            {
                ptmp   = new PO();
                ptmp.x = (float)(l0.p2.x + rx * System.Math.Cos(2 * 3.1415926 * isita / nsta + u1.CalAgl(l0.p1, l0.p2) + 3.1415926 * 1.5f));
                ptmp.y = (float)(l0.p2.y + rx * System.Math.Sin(2 * 3.1415926 * isita / nsta + u1.CalAgl(l0.p1, l0.p2) + 3.1415926 * 1.5f));
                edge_pl.Insert(ptmp);
            }
            //for (id = nd-1; id <=0; id--)
            //{
            //    ptmp = new PO();
            //    ptmp.x = ((nd - 1 - id) * l0.p1.x + id * l0.p2.x) / (nd - 1);
            //    ptmp.y = ((nd - 1 - id) * l0.p1.y + id * l0.p2.y) / (nd - 1);
            //    pk = u1.po_vertical(ptmp, l0.p2, l0.p1, rx);
            //    edge_pl.Insert(pk);
            // }
        }
Exemplo n.º 3
0
        public override void GenerateNetPo()
        {
            util u1 = new util();

            show_edge_l();
            float yita, rx;
            int   ix, id, isita;
            PO    ptmp, pc;
            PO    pk;

            pc   = new PO();
            pc.x = (l0.p1.x + l0.p2.x) / 2;
            pc.y = (l0.p1.y + l0.p2.y) / 2;
            yita = (float)System.Math.Pow(ro / ri, 1.0 / (nr - 1));
            for (id = 0; id <= nd - 1; id++)
            {
                ptmp   = new PO();
                ptmp.x = ((nd - 1 - id) * l0.p1.x + id * l0.p2.x) / (nd - 1);
                ptmp.y = ((nd - 1 - id) * l0.p1.y + id * l0.p2.y) / (nd - 1);
                ge_p_l.Insert(ptmp);
                PAINT.GetPL(ptmp);
            }
            for (ix = 0; ix < nr; ix++)
            {
                rx = (float)(ri * System.Math.Pow(yita, ix));
                for (id = 1; id < nd - 1; id++)
                {
                    ptmp   = new PO();
                    ptmp.x = ((nd - 1 - id) * l0.p1.x + id * l0.p2.x) / (nd - 1);
                    ptmp.y = ((nd - 1 - id) * l0.p1.y + id * l0.p2.y) / (nd - 1);
                    pk     = u1.po_vertical(ptmp, l0.p1, l0.p2, rx);
                    ge_p_l.Insert(pk);
                    PAINT.GetPL(pk);
                    pk = u1.po_vertical(ptmp, l0.p2, l0.p1, rx);
                    ge_p_l.Insert(pk);
                    PAINT.GetPL(pk);
                }
                for (isita = 0; isita <= nsta / 2; isita++)
                {
                    ptmp   = new PO();
                    ptmp.x = (float)(l0.p1.x + rx * System.Math.Cos(2 * 3.1415926 * isita / nsta + u1.CalAgl(l0.p1, l0.p2) + 3.1415926 / 2));
                    ptmp.y = (float)(l0.p1.y + rx * System.Math.Sin(2 * 3.1415926 * isita / nsta + u1.CalAgl(l0.p1, l0.p2) + 3.1415926 / 2));
                    ge_p_l.Insert(ptmp);
                    PAINT.GetPL(ptmp);
                }
                for (isita = 0; isita <= nsta / 2; isita++)
                {
                    ptmp   = new PO();
                    ptmp.x = (float)(l0.p2.x + rx * System.Math.Cos(2 * 3.1415926 * isita / nsta + u1.CalAgl(l0.p1, l0.p2) + 3.1415926 * 1.5f));
                    ptmp.y = (float)(l0.p2.y + rx * System.Math.Sin(2 * 3.1415926 * isita / nsta + u1.CalAgl(l0.p1, l0.p2) + 3.1415926 * 1.5f));
                    ge_p_l.Insert(ptmp);
                    PAINT.GetPL(ptmp);
                }
            }
        }