就是GDI中的PolyBezier( )函数源码!(最好是C语言)万分感谢!

解决方案 »

  1.   

    http://home.zsu.edu.cn/math/BKJY/jsjh/knowledge.htm
      

  2.   

    http://alphasun.betajin.com/alphasun/bezier/index.htm
      

  3.   

    我有一个Bezier曲线的头文件,画图时包含它就行了 。 要的话留下email。
      

  4.   

    The PolyBezier function draws one or more Bézier curves. BOOL PolyBezier(
      HDC hdc,            // handle to device context
      CONST POINT* lppt,  // endpoints and control points
      DWORD cPoints       // count of endpoints and control points
    );
    要算具体的曲线坐标就要牵扯数学了,我数学不好,呵呵
      

  5.   

    void Bezier(HDC hDC, double x1, double y1, double x2, double y2, 
             double x3, double y3, double x4, double y4)
    {
    double A = y4 - y1;
    double B = x1 - x4;
    double C = y1 * (x4-x1) - x1 * ( y4-y1);
    // Ax + By + C = 0  is line (x1,y1) - (x4,y4) double AB  = A * A + B * B; // distance from (x2,y2) to the line is less than 1
    // distance from (x3,y3) to the line is less than 1
    if ( ( A * x2 + B * y2 + C ) * ( A * x2 + B * y2 + C ) < AB )
    if ( ( A * x3 + B * y3 + C ) * ( A * x3 + B * y3 + C ) < AB )
    {
    MoveToEx(hDC, (int)x1, (int)y1, NULL);
    LineTo(hDC, (int)x4, (int)y4); return;
    }

    double x12   = x1+x2;
    double y12   = y1+y2;
    double x23   = x2+x3;
    double y23   = y2+y3;
    double x34   = x3+x4;
    double y34   = y3+y4; double x1223 = x12+x23;
    double y1223 = y12+y23;
    double x2334 = x23+x34;
    double y2334 = y23+y34; double x     = x1223 + x2334;
    double y     = y1223 + y2334; Bezier(hDC, x1, y1, x12/2, y12/2, x1223/4, y1223/4, x/8, y/8);
    Bezier(hDC, x/8, y/8, x2334/4, y2334/4, x34/2, y34/2, x4, y4);
    }
    这段代码就是BEZIER 的实现原理,但不是PolyBezier的原码不过两者实现都差不多
      

  6.   

    谢谢zxszx(zxs)
        你的代码确实可以画出BEZIER曲线。但是我如何依次得到曲线上点的座标呢?
    除了这种递归算法,有没有别的算法?
        再次感谢zxszx(zxs),请再帮我看一下。
      

  7.   

    建议查看<<计算几何>>(苏步青的那本),里面对于2次,3次Bezier曲线以及2次,3次的B杨条曲线都有正算以及反算得算法(有算法的证明)。可以参考,也可以看一下<<计算机图形学>>(清华那本),里面也有介绍。还有GDI里面那个是3次Bezier,两次或者相对应得B样条,甚至Nurbus(非均匀有理B样条)曲线,只好自己写了。或者用Google搜索,应该可以找到以上两本书的扫描版本。
      

  8.   

    在中山大学出版社出版的计算机图形学一书中(罗笑南等编的)中有一般2次,3次Bezier曲线的源代码,清华的那本也有原理介绍
      

  9.   

    <<计算几何>>和<<计算机图形学>>这两本书我找不到!谁能把书上的代码帮我贴出来?