非均匀有理B样条

维基百科,自由的百科全书
跳转至: 导航搜索
以NX Shape Studio所繪的NURBS 動畫版

非均匀有理样条Non uniform rational B-spline,NURBS),是在计算机图形学中常用的数学模型,用于产生和表示曲线及曲面。

历史[编辑]

NURBS的发展始于1950年代,它是由需要像在车体和船壳中使用的自由曲面的数学上的精确表示的工程师们所发现的,它可以在任何技术上需要的时候精确的复制出来。以前这类曲面的表示只存在于设计者创建的实体模型

该发展的先驱包括:皮埃尔·贝塞尔(Pierre Bézier), 他曾是Renault的工程师,以及Paul de Casteljau,他在Peugeot工作,两个都是法国人。贝塞尔基本是和de Casteljau独立发展的,两人互相不知道对方的工作。但是因为贝塞尔发表了他的工作的结果,今天的一般的计算机图形学用户认为样条 -- 通过在曲线上的控制点表示的那类 - 为贝塞尔样条,而de Casteljau的名字仅作为他为计算参数化曲面所设计的算法而为人所知。在1960年代,人们认识到非均匀有理B样条贝塞尔曲线的一个推广,而贝赛尔曲线可以视为均匀有理B样条。

最初NURBS仅用于汽车公司私有的计算机辅助设计包。后来它们成为标准计算机图形包的一部分,包括OpenGL图形库

NURBS曲线和曲面的实时、交互绘制最初由Silicon Graphics工作站于1989年提供。在1993年,CAS Berlin(一个和柏林工大合作的小创业公司)开发了第一个个人机上的交互式NURBS建模器,称为NöRBS。今天多数台式机上的专业计算机图形应用程序提供NURBS技术,一般通过集成一个从专用公司来的NURBS引擎。

使用[编辑]

NURBS对于计算机辅助设计(CAD)、制造(CAM)和工程(CAE)是几乎无法回避的,并且是很多业界广泛采用的标准的一部分,例如IGESSTEP,和PHIGS

但还是有很多它们在交互式建模中的优点和有用性的错误观念,主要是由于关于单一软件包及其用户界面的易用性而得出的猜测。 通常,据说编辑NURBS曲线和曲面是高度直观和可预测的。控制点总是直接连接到曲线或曲面上或象是通过一根橡皮筋连接。根据用户界面的类型,编辑可以通过它们各自的控制点实现,这对于贝塞尔曲线是最显然和最一般的,或者也可以通过高层的工具,例如样条建模或者层次结构的编辑。高层工具可以设计得很强大,并得益于NURBS创建和建立不同层次的连续性的能力: c0连续性表示连通性,c1连续性可以视为没有尖角,而c2连续性通常称为几何连续性,视觉上也就是“光滑”的东西,用NURBS还可以达到更高阶的连续性,它们可以导致"亮度连续性"。这被新车模型的摄影师所倚重,他们热衷于展示霓虹灯在车身上的镜像。灯光可以展示出完美的光滑度,这在没有NURBS的情况下实际上是不可能。

技術細節[编辑]

一條NURBS曲線用一個帶比重控制點和曲線的次序以及一個節點向量的集合定義。NURBS是B-樣條貝塞尔曲線和曲面兩者的推廣,其主要差別在於控制點的比重,這使它們成為有理的(非有理B-樣條是有理B-樣條的特殊情形)。 NURBS曲線在一個參數方向上演變,通常內部用's'參數代表,而NURBS曲面在兩個參數方向上演變。 所以,通過計算NURBS曲線的s-參數,它可以在三維空間中表示,通過計算NURBS曲面的s和t它也可以在三維空間中表示。 推廣意味著:一條貝茲曲線總是一條NURBS曲線,就像狗總是動物。反過來則不總是成立,一條NURBS曲線可以是一條貝茲曲線,就像一個動物可以是一條狗。

NURBS有用的原因有很多條:他們

  • 仿射變換下不變也在投影變換下不變;
  • 提供了標準解析形體(例如圓錐曲面)和自由曲面兩者的共同數學形式;
  • 提供了設計一大類形體的靈活性;
  • 減少了存儲形體的記憶體消耗(和更簡單的方法相比);
  • 可以用數值上穩定和精確的算法較快的計算;
  • 是非有理B-樣條和非有理和有理貝茲曲線和曲面的推廣。

節點向量是一個參數值的序列,用於決定控制點在何處和如何影響NURBS曲線。節點的個數總是等於控制點的個數加上曲線的階數。節點必須只是用於內部計算,因而一般對於軟體的終端用戶來說是沒有幫助的、不可編輯、甚至不可以見的。

節點向量的值必須升序:下面的向量是正確的:[0 0 1 2 3],而接下來這個不是:[0 0 2 1 3]。也要注意唯一重要的因素是值之間的比例:節點向量[0 0 1 2 3],[0 0 2 4 6]和[1 1 2 3 4]產生相同的曲線。不可以有比曲線的度數更多的重合值:節點的重複度≤度數。 對於一階NURBS,每個節點和一個控制點結對。

曲線的序大於或等於2,對應與一條線性曲線(序=2,表示一條直線),一條二次曲線(序=3)以及一條三次曲線(序=4)。數學上曲線用同階的多項式表示,一條三次曲線用3階多項式表示,其序為4。另外,控制點的個數必須等於或大於曲線的序。實踐上,3階的三次類型是表示曲線和曲面時最常用的。而4次或5次的有時候有用,特別是用於導數,更高階實際上從來不用因為他們經常導致內部數值問題並趨向於消耗更多的不必要的計算。

非有理曲線有時不夠用,例如用於表示圓。 這是表示一個XY平面上的均勻的圓的控制點,第四個參數是比重:

   cp_circle[0] = Controlpoint( 1、 0、0、     1);
   cp_circle[1] = Controlpoint( 1、 1、0、sqrt(2) / 2.0);
   cp_circle[2] = Controlpoint( 0、 1、0、     1);
   cp_circle[3] = Controlpoint(-1、 1、0、sqrt(2) / 2.0);
   cp_circle[4] = Controlpoint(-1、 0、0、     1);
   cp_circle[5] = Controlpoint(-1、-1、0、sqrt(2) / 2.0);
   cp_circle[6] = Controlpoint( 0、-1、0、     1);
   cp_circle[7] = Controlpoint( 1、-1、0、sqrt(2) / 2.0);
   cp_circle[8] = Controlpoint( 1、 0、0、     1);

參見[编辑]

参考[编辑]

  • Les Piegl & Wayne Tiller: The NURBS Book, Springer-Verlag 1995-1997 (2nd ed). The main reference for Bézier, B-Spline and NURBS; chapters on mathematical representation and construction of curves and surfaces, interpolation, shape modification, programming concepts.
  • Dr. Thomas Sederberg, BYU NURBS, http://cagd.cs.byu.edu/~557/text/ch5.pdf
  • Dr. Lyle Ramshaw. Blossoming: A connect-the-dots approach to splines, Research Report 19, Compaq Systems Research Center, Palo Alto, CA, June 1987
  • David F. Roger: An Introduction to NURBS with Historical Perspective, Morgan Kaufmann Publishers 2001. Good elementary book for NURBS and related issues.

外部链接[编辑]