コード例 #1
0
        public ClsBeze cnvOnpointToCntrlpoint(ClsBeze bz, double t1, double t2)
        {
            double     x1, y1, x2, y2, x3, y3, x4, y4;
            double     ta;
            double     b1p1, b2p1, b3p1, b4p1;
            double     b1p2, b2p2, b3p2, b4p2;
            double     a, b, c, d, e, f;
            ClsPairAns pa;

            x1 = bz.x1; y1 = bz.y1;
            x2 = bz.x2; y2 = bz.y2;
            x3 = bz.x3; y3 = bz.y3;
            x4 = bz.x4; y4 = bz.y4;

            ta   = 1 - t1;
            b1p1 = ta * ta * ta;
            b2p1 = 3.0 * t1 * ta * ta;
            b3p1 = 3.0 * t1 * t1 * ta;
            b4p1 = t1 * t1 * t1;

            ta   = 1 - t2;
            b1p2 = ta * ta * ta;
            b2p2 = 3.0 * t2 * ta * ta;
            b3p2 = 3.0 * t2 * t2 * ta;
            b4p2 = t2 * t2 * t2;

            a  = b2p1;
            b  = b3p1;
            c  = x2 - b1p1 * x1 - b4p1 * x4;
            d  = b2p2;
            e  = b3p2;
            f  = x3 - b1p2 * x1 - b4p2 * x4;
            pa = calcSmltqu(a, b, c, d, e, f);
            if (pa.stat == true)
            {
                bz.x2 = pa.ansa;
                bz.x3 = pa.ansb;
            }
            a  = b2p1;
            b  = b3p1;
            c  = y2 - b1p1 * y1 - b4p1 * y4;
            d  = b2p2;
            e  = b3p2;
            f  = y3 - b1p2 * y1 - b4p2 * y4;
            pa = calcSmltqu(a, b, c, d, e, f);
            if (pa.stat == true)
            {
                bz.y2 = pa.ansa;
                bz.y3 = pa.ansb;
            }
            return(bz);
        }
コード例 #2
0
        private ObjFigu cnvArcToFigu(ClsAtrXY atrxy1, ClsAtrXY atrxy2, ClsAtrXY atrxy3)
        {
            ObjFigu      objFigu;
            double       x1, y1, x2, y2, x3, y3;
            ClsArcCenter cntr;
            ClsArcSER    ser;
            ClsBeze      bz;
            double       rag;
            double       t1, t2;

            x1           = atrxy1.x;
            y1           = atrxy1.y;
            x2           = atrxy2.x;
            y2           = atrxy2.y;
            x3           = atrxy3.x;
            y3           = atrxy3.y;
            objFigu      = new ObjFigu();
            objFigu.kind = Constants.LINEKIND;
            objFigu.x1   = x1; objFigu.y1 = y1;
            objFigu.x4   = x3; objFigu.y4 = y3;
            cntr         = m_libCurve.getCurve3pCenter(x1, y1, x2, y2, x3, y3);
            if (cntr.stat == false)
            {
                return(objFigu);
            }
            ser = m_libCurve.getCurve3pRagR(x1, y1, x2, y2, x3, y3, cntr.x0, cntr.y0);
            if (ser.stat == false)
            {
                return(objFigu);
            }
            bz           = new ClsBeze();
            bz.x1        = x1; bz.y1 = y1;
            rag          = (ser.erag - ser.srag) / 3.0 + ser.srag;
            bz.x2        = Math.Cos(rag) * ser.dr + cntr.x0;
            bz.y2        = Math.Sin(rag) * ser.dr + cntr.y0;
            rag          = (ser.erag - ser.srag) / 3.0 * 2.0 + ser.srag;
            bz.x3        = Math.Cos(rag) * ser.dr + cntr.x0;
            bz.y3        = Math.Sin(rag) * ser.dr + cntr.y0;
            bz.x4        = x3; bz.y4 = y3;
            t1           = 1.0 / 3.0; t2 = 1.0 / 3.0 * 2.0;
            bz           = m_libCurve.cnvOnpointToCntrlpoint(bz, t1, t2);
            objFigu.kind = Constants.BEZEKIND;
            objFigu.x1   = bz.x1; objFigu.y1 = bz.y1;
            objFigu.x2   = bz.x2; objFigu.y2 = bz.y2;
            objFigu.x3   = bz.x3; objFigu.y3 = bz.y3;
            objFigu.x4   = bz.x4; objFigu.y4 = bz.y4;
            return(objFigu);
        }