How to| 创建带有样条基元的图形

Wolfram 语言提供了完全集成的样条图形基元,例如 Bézier 曲线、B-样条曲线和 B-样条曲面等. 样条基元支持全部范围的用户控件,例如任意次数和样条的一种有理形式等. 样条基元为创建复数图形提供了一种简单的方法.

BezierCurve 画出一条由给定控制点定义的复合 Bézier 曲线. 缺省时使用三次 Bézier 曲线:

In[1]:=
Click for copyable input
Out[1]=

BSplineCurve 用于 Graphics 创建一条7个控制点组成的三次 B-样条曲线:

In[2]:=
Click for copyable input
Out[2]=

一般地,样条曲线不经过控制点. 然而,它们经过端点:

In[3]:=
Click for copyable input
Out[3]=
    

选项 SplineDegree 控制代表样条曲线的多项式的次数. 通常,次数越高,曲线越平滑.

这里,通过使用 TableBSplineCurve 迭代,并且令 SplineDegree 由1到6变化,产生了6个具有相同控制点集合的不同样条曲线:

In[1]:=
Click for copyable input
Out[1]=
    

选项 SplineKnots 为 B-样条曲线的形状提供详细控制. 如果不指定 SplineKnots 的值,Wolfram 语言按照这样的方式给出默认节点序列,即使生成的曲线整体平滑且端点以内插值替换:

In[1]:=
Click for copyable input
Out[1]=

这是同一曲线,不同之处是默认的节点值显式给出. 第一个和最后一个 重复节点使得曲线经过节点,其中 是样条次数. 其余节点均匀分布:

In[2]:=
Click for copyable input
Out[2]=

通过在中间重复节点值 ,可以降低曲线的平滑度:

In[3]:=
Click for copyable input
Out[3]=
    

SplineClosed 选项的设置为 True 时,Wolfram 语言将创建一条平滑闭合的 B-样条曲线:

In[1]:=
Click for copyable input
In[2]:=
Click for copyable input
Out[2]=
In[3]:=
Click for copyable input
Out[3]=
    

选项 SplineWeights 可用于指定每个点的权重. 曲线将向权重较大的点拉近:

In[1]:=
Click for copyable input

如果 SplineWeights 没有明确设置,Wolfram 语言为每个点指定相等的权重:

In[2]:=
Click for copyable input
Out[2]=

注意曲线被拉向中间的点,SplineWeights 为该点指定的权重为5:

In[3]:=
Click for copyable input
Out[3]=

从数学角度而言,非均匀的权重创建的是有理 B-样条函数, 也被称作 NURBS. NURBS 能够表示一般 B-样条不能表示的形状. 例如,通过设定 SplineWeights 中的值,设定 SplineKnots 中的值,使用 BSplineCurve 创建一个精确的圆环:

In[4]:=
Click for copyable input
In[5]:=
Click for copyable input
Out[5]=
    

三维样条曲线可以通过三维点创建:

In[1]:=
Click for copyable input
Out[1]=
In[2]:=
Click for copyable input
Out[2]=

通过将样条用 Tube 包装,可以创建三维管状样条曲线. 在这里,管半径为0.2:

In[3]:=
Click for copyable input
Out[3]=
In[4]:=
Click for copyable input
Out[4]=

通过将一个半径列表与控制点联合,可以创建具有不同半径的管:

In[5]:=
Click for copyable input
In[6]:=
Click for copyable input
Out[6]=
    

BSplineSurface 创建一个由三维点阵定义的张量积 B-样条曲面:

In[1]:=
Click for copyable input
Out[1]=

BSplineCurve 所有选项的工作方式相同. 然而,对于曲面,您可以对它们在每个参数方向上分别指定. 例如,下面的 SplineDegree 设置创建了一条 B-样条曲线,它在一个方向上是一次,而在另一个方向上是3次:

In[2]:=
Click for copyable input
Out[2]=

与 B-样条曲线相似,有理曲面,或称 NURBS 曲面,可以使用 SplineWeights 创建. 许多电脑辅助设计应用程序使用 NURBS 表示工业曲面. 下面的例子生成一个直角圆柱管:

In[3]:=
Click for copyable input
Out[3]=