代码太多了,给我发邮件吧! [email protected]

解决方案 »

  1.   

    下面是一个函数,我会给你发一个完整的工程,有需要的留下地址呀,还有许多需要改进的的方,共同探讨了。比如 二次系数和一次系数之间的关系等等。                  
    /// <summary>
    /// 构造自定义二次曲线
    /// </summary>
    /// <param name="dubXS">二次系数</param>
    /// <param name="dubQJ">坐标区间</param>
    /// <param name="dubX">X采样点</param>
    /// <returns>二次曲线采样点坐标</returns>
    public static ArrayList retrunLstCurve(double[,] dubXS,double[] dubQJ,double dubX)
    {
    int count = 0;
    count = Convert.ToInt32(Math.Floor((dubQJ[1] - dubQJ[0]) / dubX));
    ArrayList lstCYD = new ArrayList();
    for(int i = 0 ; i < count; i++ )
    {
    /// aX^2     +   2bXY     +   cY^2     +   2dx      +   2ey      +   f        =  0 
    /// dubXS[0,0]   dubXS[0,1]   dubXS[0,2]   dubXS[1,0]   dubXS[1,1]   dubXS[1,2]
    double dubXx = dubQJ[0] + dubX * i;
    double dubYy = 0;
    lstCYD.Add(dubXx);
    double dubA = dubXS[0,2];
    double dubB = 2 * dubXS[0,1] * dubXx + 2 * dubXS[1,1];
    double dubC = dubXS[0,0] * dubXx * dubXx + 2 * dubXS[1,0] * dubXx + dubXS[1,2];
    double dub4AC = dubB * dubB - 4 * dubA * dubC;
    if(dub4AC >= 0)
    {
    /// if A != 0
    if(dubA != 0 )
    {
    dubYy = (-dubB + Math.Sqrt(dub4AC)) / 2 * dubA;
    lstCYD.Add(dubYy);
    }
    else
    {  
    /// if B != 0
    if(dubB != 0)
    {
    dubYy = -dubC / dubB;
    lstCYD.Add(dubYy);
    } else
    {
    dubYy = dubB;
    lstCYD.Add(dubYy);
    }
    }
    }
    else
    {
    continue;
    }
    }
    return lstCYD;
    }