| 发表于:2007-10-18 13:55:051楼 得分:0 |
构造并绘制曲线 gdi+ 支持多种类型的曲线:椭圆、弧形、基数样条和贝塞尔样条。椭圆是由其边界矩形定义的;弧是椭圆的一部分,由一个起始角和一个扫描角定义。基数样条由一系列点和张力参数定义,即曲线平滑地通过系列中的每个点,张力参数影响曲线的弯曲方式。贝塞尔样条由两个端点和两个控制点定义,即该曲线不通过控制点,但是控制点影响曲线从一个端点到另一个端点时的方向和弯曲程度。 绘制基数样条曲线 基数样条是平滑通过一组给定点的曲线。若要绘制基数样条,请创建 graphics 对象并将一个点的数组的地址传递给 drawcurve 方法。下面的示例绘制了一条通过五个指定点的钟形基数样条。 point points[] = {point(0, 100), point(50, 80), point(100, 20), point(150, 80), point(200, 100)}; pen pen(color(255, 0, 0, 255)); graphics.drawcurve(&pen, points, 5); 下面的插图显示该曲线和五个点。 使用 graphics 类的 drawclosedcurve 方法可绘制闭合的基数样条。在闭合的基数样条中,曲线连续通过序列中最后一个点,并与序列中的第一个点连接。 下面的示例绘制了一条通过六个指定点的闭合的基数样条。 point points[] = {point(60, 60), point(150, 80), point(200, 40), point(180, 120), point(120, 100), point(80, 160)}; pen pen(color(255, 0, 0, 255)); graphics.drawclosedcurve(&pen, points, 6); 下面的插图显示闭合的样条和六个点。 通过将张力参数传递给 drawcurve 方法,可更改基数样条的弯曲方式。下面的示例绘制了三条通过同一组点的基数样条。 point points[] = {point(20, 50), point(100, 10), point(200, 100), point(300, 50), point(400, 80)}; pen pen(color(255, 0, 0, 255)); graphics.drawcurve(&pen, points, 5, 0.0f); // tension 0.0 graphics.drawcurve(&pen, points, 5, 0.6f); // tension 0.6 graphics.drawcurve(&pen, points, 5, 1.0f); // tension 1.0 下面的插图显示三条样条及其张力值。请注意,当张力为 0 时,这些点由一条直线连接。 绘制贝塞尔样条 用四个点定义一条贝塞尔样条:一个起点、两个控制点和一个终点。下面的示例绘制了一条起点为 (10, 100)、终点为 (200, 100) 的贝塞尔样条。两个控制点分别为 (100, 10) 和 (150, 150)。 point p1(10, 100); // start point point c1(100, 10); // first control point point c2(150, 150); // second control point point p2(200, 100); // end point pen pen(color(255, 0, 0, 255)); graphics.drawbezier(&pen, p1, c1, c2, p2); 下面的插图显示产生的贝塞尔样条及其起点、控制点和终点。该插图还显示样条的凸包络,凸包络是通过将这四个点用直线相连而形成的多边形。 可使用 graphics 类的 drawbeziers 方法绘制相连的贝塞尔样条序列。 下面的示例绘制一条由两条相连的贝塞尔样条组成的曲线。第一条贝塞尔样条的终点是第二条贝塞尔样条的起点。 point p[] = { point(10, 100), // start point of first spline point(75, 10), // first control point of first spline point(80, 50), // second control point of first spline point(100, 150), // end point of first spline and // start point of second spline point(125, 80), // first control point of second spline point(175, 200), // second control point of second spline point(200, 80)}; // end point of second spline pen pen(color(255, 0, 0, 255)); graphics.drawbeziers(&pen, p, 7); 下面的插图显示相连的样条和这七个点。 | | |
|