McNeel的NURBS Geometry Overview将一条NURBS曲线的定义分为四部分:次数、控制点、节点以及求值规则。这里的knot vector是一串节点数值,文档特意说明,vector在此不表示三维方向。Rhino的控制点定义页则把三维控制点解释为空间位置。同一份曲线资料可以同时含有空间点和参数数列,但不能因为两者都有数字,就把节点表也读成空间坐标表。[1][3]
次数与阶又有固定的数量关系。degree是正整数,order比degree多一;因此,写着三次与写着四阶,可以是在表达同一项次数资料的两个术语。它们没有说明曲线只有三个控制点,也不意味着节点表只能有三个值。次数是这组定义的一部分,控制点清单与节点清单仍各自存在,不能被一个“三”字全部替代。[1]
节点数列的次序条件并非每一项都必须严格增大。overview要求从前到后保持相同或变大,并限制同一数值的重复次数不超过degree。三次曲线的原例中,连续三个2可以出现在合格清单里,四个2则不合格。重复本身并未被一概排除;要结合次数,才能判断原例为什么将这两份看似接近的清单分别对待。[1][2]
同值出现的次数叫作重数。三次原例中的0、2和9各出现三次,属于full-multiplicity;1和3只出现一次,属于simple knot;7出现两次,则是另一种重数。这里数的是同一个数值在列表里出现多少次,而不是这个数值本身有多大。数值7并没有因此成为“七重节点”,这个例子把节点值与重数两个数值身份清楚分开。[1]
uniform的定义还结合了位置和间隔:列表以完整重数的节点开头和结束,中间为简单节点,数值等间距。文档给出的三次例子以0、1、2、3、4展开,中间间隔相同;另一例中出现1、2、5、6,间隔不一致,就不属于uniform。NURBS名称里的non-uniform说明允许非均匀,并没有把所有NURBS都强制规定为非均匀数列。[1]
节点与控制点的对应也不是普遍的一对一。overview明确说,逐节点配控制点只对一次NURBS成立;高次曲线对应的是节点组与控制点组。它的三次、七个控制点示例中,前四个控制点同前六个节点构成一组,第二至第五个控制点再同下一组节点联系。相邻组有重叠,不能把节点清单横着对齐控制点清单,便假定每一行都只属于一个空间点。[1]
控制点还有单列的标量权重。控制点定义页将位置与权重分别介绍;overview说,控制点权重都相同时曲线称为non-rational,否则为rational。这个权重是控制点附带的数值,不是又一份节点位置,也不能只凭名称中的rational就跳过具体权重关系。曲线的几个组成部分互相参与定义,却没有因此丢掉各自的资料身份。[1][3]
求值规则把这些部分接起来:它以一个称为参数的数值为输入,并给出一个点的位置。文档用黑箱作比喻,说明次数、节点与控制点决定这份映射怎样工作。输入参数是一项数值,输出才是位置;由此再回看节点数列与控制点清单,就能理解为何定义既要有参数资料,也要有空间资料,而不是将二者合并成同一串“点”。[1]
本文只整理已读文字和原数字例,未看图、运行命令或修改曲线,不据节点条件给出加工公差与曲面质量认可。overview的2020年8月7日是更新日期,首次日期未确认。[1]
资料来源:
[1] [NURBS Geometry Overview](https://developer.rhino3d.com/guides/opennurbs/nurbs-geometry-overview/)
[2] [Knot definition | Rhino 3-D modeling](https://docs.mcneel.com/rhino/8/help/en-us/popup_moreinformation/knot.htm)
[3] [Control point definition | Rhino 3-D modeling](https://docs.mcneel.com/rhino/8/help/en-us/popup_moreinformation/controlpoint.htm)
信息来源
- Robert McNeel & Associates / Dale Lear:NURBS Geometry Overview
- Robert McNeel & Associates:Knot definition | Rhino 3-D modeling
- Robert McNeel & Associates:Control point definition | Rhino 3-D modeling
本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。