绘制贝塞尔样条 用四个点定义一条贝塞尔样条:一个起点、两个控制点和一个终点。下面的示例绘制了一条起点为 (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); 下面的插图显示相连的样条和这七个点。
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);
下面的插图显示相连的样条和这七个点。