如何:绘制基数样条曲线

更新:2007 年 11 月

基数样条是平滑通过一组给定点的曲线。若要绘制基数样条曲线,请创建 Graphics 对象并将一组点的地址传递给 DrawCurve 方法。

绘制钟形基数样条曲线

  • 下面的示例绘制了一条通过五个指定点的钟形基数样条曲线。下面的插图显示该曲线和五个点。

    基数样条

Dim points As Point() = { _
   New Point(0, 100), _
   New Point(50, 80), _
   New Point(100, 20), _
   New Point(150, 80), _
   New Point(200, 100)}

Dim pen As New Pen(Color.FromArgb(255, 0, 0, 255))
e.Graphics.DrawCurve(pen, points)

Point[] points = {
   new Point(0, 100),
   new Point(50, 80),
   new Point(100, 20),
   new Point(150, 80),
   new Point(200, 100)};

Pen pen = new Pen(Color.FromArgb(255, 0, 0, 255));
e.Graphics.DrawCurve(pen, points);

绘制闭合的基数样条曲线

  • 使用 Graphics 类的 DrawClosedCurve 方法可绘制闭合的基数样条曲线。在闭合的基数样条曲线中,曲线连续通过系列中最后一个点,并与系列中的第一个点连接。下面的示例绘制了一条通过六个指定点的闭合的基数样条曲线。下面的插图显示闭合的样条曲线和六个点。

基数样条

Dim points As Point() = { _
   New Point(60, 60), _
   New Point(150, 80), _
   New Point(200, 40), _
   New Point(180, 120), _
   New Point(120, 100), _
   New Point(80, 160)}

Dim pen As New Pen(Color.FromArgb(255, 0, 0, 255))
e.Graphics.DrawClosedCurve(pen, points)

Point[] points = {
   new Point(60, 60),
   new Point(150, 80),
   new Point(200, 40),
   new Point(180, 120),
   new Point(120, 100),
   new Point(80, 160)};

Pen pen = new Pen(Color.FromArgb(255, 0, 0, 255));
e.Graphics.DrawClosedCurve(pen, points);

更改基数样条曲线的弯曲方式

  • 通过将张力参数传递给 DrawCurve 方法,可更改基数样条曲线的弯曲方式。下面的示例绘制了三条通过同一组点的基数样条曲线。下面的插图显示三条样条曲线及其张力值。请注意,当张力为 0 时,这些点由一条直线连接。

基数样条

Dim points As Point() = { _
   New Point(20, 50), _
   New Point(100, 10), _
   New Point(200, 100), _
   New Point(300, 50), _
   New Point(400, 80)}

Dim pen As New Pen(Color.FromArgb(255, 0, 0, 255))
e.Graphics.DrawCurve(pen, points, 0.0F)
e.Graphics.DrawCurve(pen, points, 0.6F)
e.Graphics.DrawCurve(pen, points, 1.0F)

Point[] points = {
   new Point(20, 50),
   new Point(100, 10),
   new Point(200, 100),
   new Point(300, 50),
   new Point(400, 80)};

Pen pen = new Pen(Color.FromArgb(255, 0, 0, 255));
e.Graphics.DrawCurve(pen, points, 0.0f);
e.Graphics.DrawCurve(pen, points, 0.6f);
e.Graphics.DrawCurve(pen, points, 1.0f);

编译代码

前面的示例是为使用 Windows 窗体而设计的,它们需要 Paint 事件处理程序的参数 PaintEventArgs e。

请参见

其他资源

直线、曲线和图形

构造并绘制曲线