基数样条是一连串连接起来形成较大曲线的单独的曲线。 基数样条由点的数组和张力参数指定。 基数样条流畅地穿过数组中的每个点;没有尖锐的角,并且曲线的紧绷性没有突然的变化。 下图显示了一组点以及穿过其中每个点的一条基数样条。
物理和数学样条
物理样条是一块薄木头或其他柔性材料。 在数学样条出现之前,设计人员使用物理样条绘制曲线。 设计师会将样条放在一张纸上,并将它定位成给定的一组点。 然后,设计师可以通过用笔或铅笔沿样条进行绘制来创建曲线。 给定的一组点可能会产生各种曲线,具体取决于物理样条的属性。 例如,具有高弯曲阻力的样条会产生与极其灵活的样条不同的曲线。
数学样条的公式基于灵活棒的属性,因此数学样条生成的曲线类似于曾经由物理样条生成的曲线。 正如不同紧张的物理样条将通过给定的点集产生不同的曲线一样,具有不同值的紧张参数的数学样条将通过给定的一组点产生不同的曲线。 下图显示了穿过同一组点的四条基数样条。 显示了每条基数样条的张力。 0 的紧张与无限的物理紧张相对应,迫使曲线在点之间采用最短的方式(直线)。 当张力为1时,表示无物理张力,使样条能够沿着最小总弯曲度的路径行进。 由于紧张值大于 1,曲线的行为类似于被压缩的弹簧,被迫采取更长的路径。
上图中的四条样条在起点处共享同一条切线。 切线是从起点到下一个点沿曲线绘制的线条。 同样,终点处共享的切线是从终点到曲线上的前一个点绘制的线条。
若要绘制基数样条,需要 Graphics 类的实例、Pen和 Point 对象的数组。Graphics 类的实例提供绘制样条的 DrawCurve 方法,Pen 存储样条的属性,如线条宽度和颜色。
Point 对象的数组存储曲线将经过的点。 下面的代码示例演示如何绘制穿过 myPointArray
中的点的基数样条。 第三个参数是紧张。
myGraphics.DrawCurve(myPen, myPointArray, 1.5f);
myGraphics.DrawCurve(myPen, myPointArray, 1.5F)