Partial shape-preserving splines
ABSTRACT
一个复杂的几何形状通常是一组简单几何形状的组合,这些简单几何形状在数学表示和构造方法上可能彼此不同。组合这些简单形状的必要条件之一是尽可能地保留它们的原始形状。本文引入了一组局部形状保持(PSP)样条基函数,将形状基元集合与灵活的混合范围控制平滑地结合起来。这些样条基函数可以看作是传统b样条基函数的一种推广,其中使用的形状基元是控制点或控制多边形。psp样条基函数具有传统b样条技术的所有优点,它是非负的分段多项式,并且具有单位划分的性质。然而,psp样条是一种更强大的自由几何形状设计技术,它也是一种形状保持样条。此外,psp样条技术隐式地将形状控制基元的权重集成到其基函数中,允许用户基于加权控制基元设计所需的几何形状。虽然它的基函数是简单的分段多项式函数,但它具有与基于有理分段多项式的样条技术(如 N U R B S NURBS NURBS)相同的形状设计优势。特别是,当控制形状基元指定为一组控制点时, P S P PSP PSP-样条的行为就像一个更平滑的多边形,有了它,形状可以被设计成以任意要求的精度平滑地接近指定的控制多边形或控制网格。因此,可以使用相对较小的控制点集来构建更丰富的几何形状集。
1.Introduction
将复杂的几何形状表示为一组简单几何图元的组合,是计算机图形学和计算机辅助几何设计中广泛使用的形状建模方法。 C S G CSG CSG(构造实体几何)技术是一种实体形状建模技术,用于将简单的隐式几何图元组合成更复杂的几何图元,直接从这个想法发展而来。 C S G CSG CSG 提供的一个典型的形状设计特性是一种形状保持技术,它允许形状设计者部分保留原始几何图元。然而,我们仍然缺乏一种类似于 C S G CSG CSG的有效构造方法来构造参数表示的形状。一种方法是将传统的基于控制多边形的样条技术扩展到一个通用的形状搅拌器中,允许它平滑地组合一组控制基本形状,而不仅仅是控制点。这种形状混合器的必要需求之一是它在控制控指定的原始形状特征应保持到何种程度方面的灵活性。 显然,传统的样条基函数,当用于加权一组控制点时,不满足这一要求。
本文在[1]中引入的样条基函数的基础上,提出了一种新的参数样条技术。这些基函数部分地保持了形状,因为原始控制几何图形的形状可以保持到任何需要的程度。这部分的一种保形特征提出了样条基函数允许一个分治法的基本思想设计一个复杂的形状,可以通过递归细分一个形状为两个或两个以上的简单形状,直到这些子形状变得足够简单,直接使用某些参数设计几何图元。此外,根据表示这些形状的方便性和有效性,该技术中用于构建所需几何形状的几何图元可以具有不同的数学形式。
所提出的 P S P PSP PSP样条在设计有多个平面部分的几何形状时特别有效。 尽管各种自由形式的 C A G D CAGD CAGD技术和工具可以用于设计几乎任何类型的几何形状,但它们中的大多数在设计具有平坦部分表面的自由曲面几何形状时并不是非常有效的。让我们考虑图1(a)所示曲线的设计问题。 如果这些曲线是使用 B 样条或 N U R B S NURBS NURBS 设计的,则需要四个以上的控制点来实现指定控制多边形顶点附近形状的平滑度,即使由四个角顶点定义的控制多边形足以捕捉圆角正方形的主要特征。这是因为,当使用传统的样条技术时,需要不止一个控制点来在正方形的每个角上实现一定的平滑度。 此外,所有这些控制点都必须仔细协调,在这些地方需要特别注意。 然而,有了本文提出的形状设计技术,这个设计任务可以很容易地完成。
图1.(a)只用四个控制点就可以很好地捕捉圆角正方形的形状。(b)可以设计样条基函数,在其支持的子区域内灵活取值1。
如后面所述,所提出的 P S P PSP PSP样条基函数与传统的b样条基函数具有相似的性质。例如,所有这些样条基函数都是分段多项式,可以建立到任何所需的平滑程度。它们都是非负的,具有统分的性质。此外,这些基本函数为用户提供了灵活性,可以将权重隐式地关联到每个单独的控制点,并使用加权控制点设计所需的形状。此外,这些样条基函数也具有传统b样条基函数的简单和优雅。它们易于实现,并且可以有效地进行评估。
这些样条基函数的发展始于对弯曲现实世界中的弯曲导线(如不同半径的铁条)所需能量的实际观察。要把一根非常硬的粗铁丝弯曲成所需的形状,要么铁丝应该足够长,要么用来弯曲铁丝的力应该非常大。然而,对于一根非常柔韧的金属丝来说,由于施加在金属丝上的力只在一个很小的范围内有效,所以它可以很容易地弯曲成所需的曲率。
考虑以参数形式表示为
C
(
t
)
C(t)
C(t),
t
∈
[
a
,
b
]
t\in [a,b]
t∈[a,b]的控制原始曲线,并观察在将曲线
C
(
t
)
C(t)
C(t)修改为
D
(
t
)
=
B
(
t
)
C
(
t
)
D(t) = B(t)C(t)
D(t)=B(t)C(t)时,如何通过引入权重函数
B
(
t
)
B(t)
B(t),
0
≤
B
(
t
)
≤
1
0≤B(t)≤1
0≤B(t)≤1来适应曲线的柔韧性。如果我们假设曲线
C
(
t
)
C(t)
C(t)是一个非常刚性的形状,并且我们不希望它在乘以
B
(
t
)
B(t)
B(t)时发生显著变化,那么
B
(
t
)
B(t)
B(t)的值必须接近1。为了使刚性曲线弯曲以达到所需的曲率,曲线段的长度必须足够长。有了这两个考虑,所需的样条基函数就清晰得多了。
B
(
t
)
B(t)
B(t)的形状如图
1
(
b
)
1(b)
1(b)所示。假设用不同柔度的控制曲线序列设计一条曲线,设
B
i
(
t
)
i
=
1
n
{B_i(t)}^n_{i=1}
Bi(t)i=1n为为满足上述要求而开发的样条基函数序列。那么曲线可以用以下参数形式描述:
P
(
t
)
=
∑
i
=
1
n
B
i
(
t
)
C
i
(
t
)
P(t)=\sum_{i=1}^nB_i(t)C_i(t)
P(t)=i=1∑nBi(t)Ci(t)
其中,根据每个指定的原始曲线
C
i
(
t
)
C_i(t)
Ci(t)的柔度设计混合基函数
B
i
(
t
)
B_i(t)
Bi(t)。换句话说,具有高度适应性的曲线基元
C
i
(
t
)
C_i(t)
Ci(t)应该与具有相对较长支撑的基函数
B
i
(
t
)
B_i(t)
Bi(t)相关联。
要使用 P S P PSP PSP样条技术设计参数曲线,只需根据设计过程中使用的控制形状集指定一系列间隔。然后,对于每个区间,可以直接建立一个样条基函数 B i ( t ) B_i(t) Bi(t),作为根据区间左右两端建立的两个光滑单位阶跃函数的差。新提出的样条曲线设计方案的一个新特点是,它们可以调整为将给定的控制多边形或更一般地说,给定的控制边界曲线集近似到任何所需的精度。因此,设计技术也可以称为一种多边形平滑技术。此外,所提出的设计技术也可用于近似某些类型的二次曲线,如圆和椭圆,尽管不可能使用分段多项式曲线精确表示这些类型的曲线。
所提出的样条技术的另一个特点是,传统 N U R B S NURBS NURBS中考虑的权重被解释为 P S P PSP PSP样条基函数的支持长度,并且隐式地内置于样条技术中。因此,尽管 P S P PSP PSP样条基函数简单地用分段多项式表示,但它在设计自由形式参数化形状方面比传统 N U R B S NURBS NURBS更强大。
在本文的其余部分中,我们将首先简要讨论一些相关工作和所需样条基函数的基本性质。然后,我们考虑如何构造光滑的分段多项式单位阶跃函数,即 P S P PSP PSP样条曲线技术的构造块。然后是 P S P PSP PSP样条基函数的构造,以及如何使用它们来设计平滑的自由曲线。在第6节中,介绍了 P S P PSP PSP样条曲线到二维的推广,以及一些曲面设计示例。
2.Related work
基于样条曲线的形状设计技术,如B样条曲线和NURBS曲线曲面,在生成计算机图形学、计算机游戏和计算机辅助几何设计中使用的几何形状方面非常强大。然而,人们仍然发现,这些技术在设计某些复杂的几何对象时,在数学表示和指定底层控制多边形的方便性方面不是非常有效,尽管在实践中可以仅使用B样条曲线或NURBS设计任何所需的形状。已经观察到,通过引入新的形状参数,可以增强基于样条曲线的几何设计方案的设计灵活性和能力。到目前为止,已经提出了几种基于这一观察结果的技术,如贝塔样条、有理贝塔样条和 α \alpha α样条曲线。在Beta样条中,Barsky和Beatty通过分别考虑一阶和二阶几何连续性,在传统的均匀三次B样条建模方案中引入了两个形状参数,即偏差和张力。后来,巴斯基通过在贝塔样条曲线中引入权重,进一步提出了有理贝塔样条曲线。由于Beta样条是传统B样条的延伸,有理Beta样条可以看作是NURBS的一种推广。最近,Tai和Loe提出了另一种推广传统NURBS的方法,并提出了 α \alpha α样条通过混合一系列奇异的重新参数化线段。但是,当控制点或控制多边形扩展到一组常规控制几何图元时,这些样条曲线都不提供部分形状保持的设计功能。在[8]中,引入了一种局部保形NURBS,以增强传统样条技术的设计能力。然而,本文提出的技术是基于分段多项式的,这在理论简单性和计算效率方面更具吸引力。
3.Partial shape-preserving spline basis functions
在样条几何中,对于什么是基函数没有普遍接受的定义 [9]。在形状设计实践中,引入了不同类型的样条基函数来处理不同的实际形状设计问题,如伯恩斯坦多项式、B样条基函数以及有理B样条基函数。
一般来说, k k k维参数空间 R k R^k Rk中的一个基函数可以理解为一个映射
B : R k → R B:R^k\to R B:Rk→R
满足以下性质:
- 0 ≤ B ( X ) ≤ 1 , 对 于 所 有 的 X ∈ R k 0≤B(X)≤1,对于所有的X\in R^k 0≤B(X)≤1,对于所有的X∈Rk
- 对于任意实数 α ∈ R , { X ∣ X ∈ R k , B ( X ) ≥ α } \alpha \in R,\{X|X\in R^k,B(X)≥\alpha\} α∈R,{X∣X∈Rk,B(X)≥α}是连通集
- B ( X ) B(X) B(X)应该是分段多项式,具有一定的平滑度,如 C 2 C^2 C2连续性
- 每个 B ( X ) B(X) B(X)应该易于计算且数值稳定
- 对于域 D ∈ R k D\in R^k D∈Rk的给定分区 { Δ m } m = 0 M \{\Delta_m\}_{m=0}^M {Δm}m=0M,即 ∪ m = 0 M Δ m = D \cup_{m=0}^M \Delta_m=D ∪m=0MΔm=D, A r e a ( Δ i ∩ Δ j ) = 0 , 当 i ≠ j 时 Area(\Delta_i \cap \Delta_j)=0,当i≠j时 Area(Δi∩Δj)=0,当i=j时,所有的样条基函数 B Δ m ( X ) , m = 0 , 1... , M B_{\Delta m}(X),m=0,1...,M BΔm(X),m=0,1...,M,建立在分区上的总和应该是1。即 ∑ m = 0 M B Δ m ( X ) = 1 \sum_{m=0}^M B_{\Delta m}(X)=1 ∑m=0MBΔm(X)=1 (在X时刻,所有基函数的值相加为1)
然而,为了实现第 1 节中提出的想法,B(X) 需要具有这样一个独特的特征,即它不仅具有与用于设计平滑自由曲线和曲面的传统 B 样条技术相似的形状设计能力,而且还可以用于设计那些由一些预制形状组合而成的自由曲线和曲面。也就是说,当这些样条基函数被用作一种混合器来组合一组原始控制形状时,用户可以指定他们希望在多大程度上保持这些原始控制形状的原始形状。因此,除上述要求外,样条基函数B(X)还应满足以下部分保形条件:
- 每个 B Δ m ( X ) B_{\Delta m}(X) BΔm(X)都应该根据相应的原始形状的柔韧性来构建,并且能够在 Δ m \Delta m Δm的子区域中取值
4.Piecewise polynomial smooth unit step functions
构造一元保形样条基函数的一种方法是使用分段多项式光滑单位阶跃函数。文[10]中首次引入分段多项式光滑单位阶跃函数来混合隐式形状。该函数是从标准的Heaviside(海维赛德)单位阶跃函数开始迭代定义的,可以用稍微不同的方式定义。以下公式为[11]中使用的公式
H
0
(
x
)
=
{
0
,
x
<
0
1
2
,
x
=
0
1
,
x
>
0
(1)
H_0(x)=\begin{cases} 0,x<0\\ \frac{1}{2},x=0\\ 1,x>0 \end{cases}\tag{1}\\
H0(x)=⎩⎪⎨⎪⎧0,x<021,x=01,x>0(1)
H n ( x ) = 1 2 ( ( 1 + x n ) H n − 1 ( x + 1 ) + ( 1 − x n ) H n − 1 ( x − 1 ) ) , n = 1 , 2 , 3... (2) H_n(x)=\begin{matrix}\frac{1}{2}((1+\frac{x}{n})H_{n-1}(x+1)+(1-\frac{x}{n})H_{n-1}(x-1)),n=1,2,3... \end{matrix} \tag{2} Hn(x)=21((1+nx)Hn−1(x+1)+(1−nx)Hn−1(x−1)),n=1,2,3...(2)
H n ( x ) H_n(x) Hn(x)可以看作是Heaviside单位阶跃函数的推广,称为n阶光滑单位阶跃函数。可以看出, H n ( x ) H_n(x) Hn(x)具有以下性质:
命题4.1. 对每一个函数 H n ( x ) H_n(x) Hn(x),我们有:
-
当 n > 1 n>1 n>1时, H n ( x ) H_n(x) Hn(x)是 C n − 1 C^{n-1} Cn−1连续的
-
H n ( x ) H_n(x) Hn(x)是 n n n阶分段多项式函数
-
H n ( x ) H_n(x) Hn(x)是单调递增的,当 x ≥ n x≥n x≥n时取值为1,当 x ≤ − n x≤-n x≤−n时取值为0
-
H n ( x ) + H n ( − x ) = 1 , H n ( 0 ) = 1 2 H_n(x)+H_n(-x)=1,H_n(0)=\frac{1}{2} Hn(x)+Hn(−x)=1,Hn(0)=21
-
当 x < 0 x<0 x<0时, H n ( x ) ≥ H n − 1 ( x ) H_n(x)≥H_{n-1}(x) Hn(x)≥Hn−1(x); 当 x ≥ 0 x≥0 x≥0时, H n ( x ) ≤ H n − 1 ( x ) H_n(x)≤H_{n-1}(x) Hn(x)≤Hn−1(x) n = 1 , 2... n=1,2... n=1,2...
-
x ( 2 H n ( x ) − 1 ) ≤ x ( 2 H n − 1 ( x ) − 1 ) , n = 1 , 2... x(2H_n(x)-1)≤x(2H_{n-1}(x)-1),n=1,2... x(2Hn(x)−1)≤x(2Hn−1(x)−1),n=1,2...
命题4.1(1)-(5)的证明可直接使用数学归纳原理获得。关于命题4.1(6),可以从命题4.1(5)得到,当 x < 0 x<0 x<0时 2 H n ( x ) < 1 2H_n(x)<1 2Hn(x)<1,当 x ≥ 0 x≥0 x≥0时 2 H n ( x ) ≥ 1 2H_n(x)≥1 2Hn(x)≥1。
根据等式(2)中给出的 H n ( t ) H_n(t) Hn(t)的定义,函数 H 1 ( x ) 、 H 2 ( x ) 和 H 3 ( x ) H_1(x)、H_2(x)和H_3(x) H1(x)、H2(x)和H3(x)可以被显式写出。注意, H n ( x ) = 1 − H n ( − x ) H_n(x)=1-H_n(-x) Hn(x)=1−Hn(−x),我们只需要写出 x ≤ 0 x≤0 x≤0的这些函数
H 1 ( x ) = { 0 , x < − 1 ; 1 + x 2 , − 1 ≤ x ≤ 0 (3) H_1(x)=\begin{cases} 0,x<-1;\\ \frac{1+x}{2},-1≤x≤0 \end{cases} \tag{3} H1(x)={0,x<−1;21+x,−1≤x≤0(3)
H 2 ( x ) = { 0 , x < − 2 ; 1 2 ( 1 + x 2 ) 2 , − 2 ≤ x < 0 (4) H_2(x)=\begin{cases} 0,x<-2;\\ \frac{1}{2}(1+\frac{x}{2})^2,-2≤x<0 \end{cases}\tag{4} H2(x)={0,x<−2;21(1+2x)2,−2≤x<0(4)
H 3 ( x ) = { 0 , x < − 3 ; 1 48 ( 3 + x ) 3 , − 3 ≤ x < − 1 ; 1 24 ( 12 + 9 x − x 3 ) , − 1 ≤ x < 0 (5) H_3(x)=\begin{cases} 0,x<-3;\\ \frac{1}{48}(3+x)^3,-3≤x<-1;\\ \frac{1}{24}(12+9x-x^3),-1≤x<0 \end{cases}\tag{5} H3(x)=⎩⎪⎨⎪⎧0,x<−3;481(3+x)3,−3≤x<−1;241(12+9x−x3),−1≤x<0(5)
图2显示了阶数为1-4的平滑单位阶跃函数的曲线图。
上面定义的平滑单位步长函数
H
n
(
x
)
H_n(x)
Hn(x)也可以通过以下方式使用Heaviside单位步长函数显式编写:
H
n
(
x
)
=
1
n
!
2
n
∑
k
=
0
n
(
−
1
)
k
(
n
k
)
(
x
+
(
n
−
2
k
)
)
n
H
0
(
x
+
(
n
−
2
k
)
)
(6)
H_n(x)=\frac{1}{n!2^n}\sum_{k=0}^n(-1)^k\left( \begin{matrix} n\\ k \end{matrix} \right)(x+(n-2k))^nH_0(x+(n-2k))\tag{6}
Hn(x)=n!2n1k=0∑n(−1)k(nk)(x+(n−2k))nH0(x+(n−2k))(6)
从(6)中,阶数为1–3的广义光滑单位阶跃函数也可以表示为以下形式:
H
1
(
x
)
=
1
2
(
(
x
+
1
)
H
0
(
x
+
1
)
−
(
x
−
1
)
H
0
(
x
−
1
)
)
(7)
H_1(x)=\frac{1}{2}((x+1)H_0(x+1)-(x-1)H_0(x-1))\tag{7}
H1(x)=21((x+1)H0(x+1)−(x−1)H0(x−1))(7)
H 2 ( x ) = 1 8 ( ( x + 2 ) 2 H 0 ( x + 2 ) − 2 x 2 H 0 ( x ) + ( x − 2 ) 2 H 0 ( x − 2 ) ) (8) H_2(x)=\frac{1}{8}((x+2)^2H_0(x+2)-2x^2H_0(x)+(x-2)^2H_0(x-2))\tag{8} H2(x)=81((x+2)2H0(x+2)−2x2H0(x)+(x−2)2H0(x−2))(8)
H 3 ( x ) = 1 48 ( ( x + 3 ) 3 H 0 ( x + 3 ) − 3 ( x + 1 ) 3 H 0 ( x + 1 ) + 3 ( x − 1 ) 3 H 0 ( x − 1 ) − ( x − 3 ) 3 H 0 ( x − 3 ) ) (9) H_3(x)=\frac{1}{48}((x+3)^3H_0(x+3)-3(x+1)^3H_0(x+1)\\ +3(x-1)^3H_0(x-1)-(x-3)^3H_0(x-3))\tag{9} H3(x)=481((x+3)3H0(x+3)−3(x+1)3H0(x+1)+3(x−1)3H0(x−1)−(x−3)3H0(x−3))(9)
可以直接观察到,阶数n的光滑单位阶跃函数
H
n
(
x
)
H_n(x)
Hn(x)在区间
[
−
n
,
n
]
[-n,n]
[−n,n]上严格单调递增。我们称这个区间为平滑单位阶跃函数的上升范围。通过引入非负数
δ
\delta
δ>0,可以轻松定义具有任何指定上升范围的平滑单位步长函数,如下所示:
H
n
,
δ
(
x
)
=
H
n
(
n
x
/
δ
)
(11)
H_{n,\delta}(x)=H_n(nx/\delta)\tag{11}
Hn,δ(x)=Hn(nx/δ)(11)
显然,当
x
≥
δ
x≥\delta
x≥δ时,
H
n
,
δ
(
x
)
=
1
H_{n,\delta}(x)=1
Hn,δ(x)=1,当
x
<
−
δ
x<-\delta
x<−δ时,
H
n
,
δ
(
x
)
=
0
H_{n,\delta}(x)=0
Hn,δ(x)=0。
图3显示了具有不同上升范围参数值
δ
\delta
δ的一些
C
2
C^2
C2连续的三次单位阶跃函数
H
3
,
δ
(
x
)
H_{3,\delta}(x)
H3,δ(x)
当
n
>
1
n>1
n>1时,可以很容易地找到光滑单位阶跃函数的导数。从(6)中可以看出,
H
n
(
x
)
H_n(x)
Hn(x)的导数可以使用Heaviside单位阶跃函数直接显式表示。当
n
>
1
n>1
n>1时,
H
n
′
(
x
)
=
1
(
n
−
1
)
!
2
n
∑
k
=
0
n
(
−
1
)
k
(
n
k
)
(
x
+
(
n
−
2
k
)
)
n
−
1
×
H
0
(
x
+
(
n
−
2
k
)
)
(12)
H_n'(x)=\frac{1}{(n-1)!2^n}\sum_{k=0}^n(-1)^k\left( \begin{matrix} n\\ k \end{matrix} \right)(x+(n-2k))^{n-1}\times H_0(x+(n-2k))\tag{12}
Hn′(x)=(n−1)!2n1k=0∑n(−1)k(nk)(x+(n−2k))n−1×H0(x+(n−2k))(12)
一般情况下,当
i
<
n
i < n
i<n时,
n
n
n次光滑单位阶跃函数
H
n
(
x
)
H_n(x)
Hn(x)的第
i
i
i阶导数可显式表示为
对于(13),可以立即获得 H 2 ( x ) , H 3 ( x ) H_2(x),H_3(x) H2(x),H3(x)的相关导数,如下所示:
图4显示了 H 5 ( x ) H_5(x) H5(x)导数的形状
5. PSP-spline basis functions
利用光滑单位阶跃函数
H
n
(
x
)
H_n(x)
Hn(x),可以立即引入一种新的样条基函数。设
[
a
,
b
]
[a,b]
[a,b]是一个区间且
a
≤
b
a≤b
a≤b.我们定义:
B
[
a
,
b
]
,
δ
(
n
)
(
x
)
=
H
n
,
δ
(
x
−
a
)
−
H
n
,
δ
(
x
−
b
)
(17)
B_{[a,b],\delta}^{(n)}(x)=H_{n,\delta}(x-a)-H_{n,\delta}(x-b) \tag{17}
B[a,b],δ(n)(x)=Hn,δ(x−a)−Hn,δ(x−b)(17)
其中,当
B
[
a
,
b
]
,
δ
(
n
)
(
x
)
B^{(n)}_{[a,b],\delta}(x)
B[a,b],δ(n)(x)用作形状混合函数时,
δ
\delta
δ用于控制混合范围的参数。
图5显示了在区间[2,6]上定义的具有不同 δ \delta δ值的三次PSP样条基函数 B [ 2 , 6 ] , δ ( 3 ) ( x ) B^{(3)}_{[2,6],\delta}(x) B[2,6],δ(3)(x)的形状。(随着 δ \delta δ的变大,曲线的坡度变得越)
根据 H n , δ ( x ) H_{n,\delta}(x) Hn,δ(x)的特性,能够得出 B [ a , b ] , δ ( n ) ( x ) B_{[a,b],\delta}^{(n)}(x) B[a,b],δ(n)(x)具有以下的特性:
-
非负性, 0 ≤ B [ a , b ] , δ ( n ) ( x ) ≤ 1 0≤B_{[a,b],\delta}^{(n)}(x)≤1 0≤B[a,b],δ(n)(x)≤1
-
平滑性, B [ a , b ] , δ ( n ) ( x ) B_{[a,b],\delta}^{(n)}(x) B[a,b],δ(n)(x)是 C n − 1 C^{n-1} Cn−1连续
-
凸性:对于任何水平值, B [ a , b ] , δ ( n ) ( x ) B_{[a,b],\delta}^{(n)}(x) B[a,b],δ(n)(x)的水平集都是一个区间
-
可加性:对于任何 c ∈ [ a , b ] c\in[a,b] c∈[a,b], B [ a , b ] , δ ( n ) ( x ) = B [ a , c ] , δ ( n ) ( x ) + B [ c , b ] , δ ( n ) ( x ) B_{[a,b],\delta}^{(n)}(x)=B_{[a,c],\delta}^{(n)}(x)+B_{[c,b],\delta}^{(n)}(x) B[a,b],δ(n)(x)=B[a,c],δ(n)(x)+B[c,b],δ(n)(x)
-
单位分解:设 t 0 ≤ t 1 ≤ t 2 ≤ ⋯ ≤ t n t_0≤t_1≤t_2≤\dots≤t_n t0≤t1≤t2≤⋯≤tn是一组数。在区间序列 ( − ∞ , t 0 ] , [ t 0 , t 1 ] , [ t 1 , t 2 ] , … , [ t n , ∞ ) (-\infty,t_0],[t_0,t_1],[t_1,t_2],\dots,[t_n,\infty) (−∞,t0],[t0,t1],[t1,t2],…,[tn,∞)上构建的PSP样条基函数具有单位分解的特性,即
∑ i = 0 n + 1 B [ t i − 1 , t i ] , δ ( n ) ( x ) = 1 , (18) \sum_{i=0}^{n+1}B_{[t_{i-1},t_i],\delta}^{(n)}(x)=1,\ \ \ \tag{18} i=0∑n+1B[ti−1,ti],δ(n)(x)=1, (18)
其中 t − 1 t_{-1} t−1和 t n + 1 t_{n+1} tn+1分别被假定为 − ∞ -\infty −∞和 ∞ \infty ∞
图6显示了三次PSP样条基函数 B [ a , b ] , δ ( 3 ) ( x ) B_{[a,b],\delta}^{(3)}(x) B[a,b],δ(3)(x)的形状,这些函数是用以下节点序列对应的指定区间序列定义的: − 5 , − 4 , 0 , 2 , 5 -5,-4,0,2,5 −5,−4,0,2,5
(17)中介绍的PSP样条基函数是基于单个平滑参数
δ
\delta
δ定义的。通过将不同的区间端点和不同的平滑参数
δ
a
,
δ
b
\delta_a,\delta_b
δa,δb关联,可以通过以下方式在给定区间
[
a
,
b
]
[a,b]
[a,b]上定义非对称的PSP样条基函数:
B
[
a
,
b
]
,
δ
a
,
δ
b
(
n
)
(
x
)
=
H
n
,
δ
a
(
x
−
a
)
−
H
n
,
δ
b
(
x
−
b
)
(19)
B_{[a,b],\delta_a,\delta_b}^{(n)}(x)=H_{n,\delta_a}(x-a)-H_{n,\delta_b}(x-b)\tag{19}
B[a,b],δa,δb(n)(x)=Hn,δa(x−a)−Hn,δb(x−b)(19)
一般来说,
B
[
a
,
b
]
,
δ
a
,
δ
b
(
n
)
(
x
)
B_{[a,b],\delta_a,\delta_b}^{(n)}(x)
B[a,b],δa,δb(n)(x)不一定是非负的,因为在某些
x
x
x值中,
H
n
,
δ
a
(
x
−
a
)
H_{n,\delta_a}(x-a)
Hn,δa(x−a)可能小于
H
n
,
δ
b
(
x
−
b
)
H_{n,\delta_b}(x-b)
Hn,δb(x−b),这会发生在
0
≤
b
−
a
<
δ
b
−
δ
a
0≤b-a<\delta_b-\delta_a
0≤b−a<δb−δa或者
0
≤
b
−
a
<
δ
a
−
δ
b
0≤b-a<\delta_a-\delta_b
0≤b−a<δa−δb。只要
δ
a
\delta_a
δa和
δ
b
\delta_b
δb之间的差值小于区间长度
b
−
a
b-a
b−a,
B
[
a
,
b
]
,
δ
a
,
δ
b
(
n
)
(
x
)
B_{[a,b],\delta_a,\delta_b}^{(n)}(x)
B[a,b],δa,δb(n)(x)将是非负的。非对称PSP样条基函数的一些示例如图7所示。然而,在本文中我们将只研究由一个公共平滑参数构造的PSP样条基函数的性质。
当使用等间距节点时,基于等间距节点序列构建的传统B样条基函数能被视为PSP样条基函数特例,对应于构建PSP样条基函数时使用的特定多边形平滑参数 δ \delta δ。例如,三次B样条基函数使用节点 0 , 1 , 2 , . . . 0,1,2,... 0,1,2,...将与三次PSP样条基函数相同,该三次PSP样条基函数使用 δ = 1.5 \delta=1.5 δ=1.5构建,对应于区间 [ 1.5 , 2.5 ] , [ 2.5 , 3.5 ] , . . . [1.5,2.5],[2.5,3.5],... [1.5,2.5],[2.5,3.5],...一般来说,当 n ≥ 1 n≥1 n≥1,用节点 0 , 1 , 2 , . . . 的 n 0,1,2,...的n 0,1,2,...的n次B样条基函数与从区间 [ a i , a i + 1 ] , a i = i + n / 2 , i = 0 , 1 , 2 , . . . [a_i,a_{i+1}],a_i=i+n/2,i=0,1,2,... [ai,ai+1],ai=i+n/2,i=0,1,2,...,使用多边形平滑参数 δ = n / 2 \delta=n/2 δ=n/2构建的PSP样条基函数 B [ a i , a i + 1 ] , δ ( n ) ( t ) B_{[a_i,a_{i+1}],\delta}^{(n)}(t) B[ai,ai+1],δ(n)(t)是相同的。
对于非等间距节点,PSP样条基函数通常不同于B样条基函数。这是因为,当B样条基函数的阶数大于2时,B样条基函数的形状取决于其支撑区间所覆盖的所有节点空间的长度,而PSP样条基函数的形状仅取决于与构造它的区间末端相关的平滑参数。
6. Curve design using PSP-spline basis functions
在本节中,我们将讨论PSP样条在设计自由形式参数曲线时的优势。从调查中可以看出,这种新提出的样条技术比传统的样条技术提供了更多的设计灵活性和功能。
6.1. Control polygon based curve design
设
P
0
,
P
1
,
P
2
,
.
.
.
,
P
n
P_0,P_1,P_2,...,P_n
P0,P1,P2,...,Pn是形状控制多边形的n+1个控制点。对于每个控制点
P
i
P_i
Pi,可以设计一个单变量PSP样条基函数
B
i
(
t
)
B_i(t)
Bi(t)来指定控制点的影响范围。如果对所有这些点进行同等处理,则可以使用等间距的节点集来构建PSP样条基函数
B
i
(
t
)
,
i
=
0
,
1
,
2
,
.
.
.
,
n
B_i(t),i=0,1,2,...,n
Bi(t),i=0,1,2,...,n。例如,给定
δ
>
0
\delta>0
δ>0,以下一组
C
2
C^2
C2连续的PSP样条基函数建立在节点
0
,
1
,
2
,
.
.
.
,
n
0,1,2,...,n
0,1,2,...,n上,可用于去混合这些控制点:
B
[
0
,
1
]
,
δ
(
3
)
(
t
)
,
B
[
1
,
2
]
,
δ
(
3
)
(
t
)
,
B
[
2
,
3
]
,
δ
(
3
)
(
t
)
,
…
,
B
[
n
−
1
,
n
]
,
δ
(
3
)
(
t
)
,
B
[
n
,
n
+
1
]
,
δ
(
3
)
(
t
)
B_{[0,1],\delta}^{(3)}(t),B_{[1,2],\delta}^{(3)}(t),B_{[2,3],\delta}^{(3)}(t),\dots,B_{[{n-1},n],\delta}^{(3)}(t),B_{[n,{n+1}],\delta}^{(3)}(t)
B[0,1],δ(3)(t),B[1,2],δ(3)(t),B[2,3],δ(3)(t),…,B[n−1,n],δ(3)(t),B[n,n+1],δ(3)(t)
利用这组样条基函数,设计的形状可以参数化描述为:
P
(
t
)
=
∑
i
=
0
n
P
i
B
[
i
,
i
+
1
]
,
δ
(
3
)
(
t
)
.
(20)
P(t)=\sum_{i=0}^nP_iB_{[i,i+1],\delta}^{(3)}(t).\tag{20}
P(t)=i=0∑nPiB[i,i+1],δ(3)(t).(20)
图8中显示的曲线就是这样设计的。
在实际应用中,曲线设计者往往要求设计的曲线插值某些控制点的选择。在基于B样条的曲线设计中,基本上通过两种方式实现,要么使用重复的控制点,要么使用重复的节点。对于基于PSP样条的曲线,让设计的曲线插值一些选定的控制点更简单。实际上,我们可以将建立PSP样条基函数的区间长度解释为与控制点相关联的一种权重或控制点周围设计曲线的一种刚度。间隔越长,与控制点关联的权重越大。为了使设计曲线插值给定的控制点,只需要确保用于构造与控制点相关联的PSP样条基函数的间隔长度大于 2 δ 2\delta 2δ,这是因为在这种情况下,样条基函数在区间的中间将取值为1。
为了让设计的曲线插值第一个和最后一个控制点,我们只需要在第一个区间的左端使用相对较小的节点,在最后一个区间使用相对较大的节点。为了说明所提出的样条技术的优点,我们在这里逐步描述如何使用六个控制点 P 1 ( − 3 , 0 ) , P 2 ( − 1 , 0 ) , P 3 ( − 3 , 5 ) , P 4 ( 3 , 5 ) , P 5 ( 1 , 0 ) , P 6 ( 3 , 0 ) P_1(-3,0),P_2(-1,0),P_3(-3,5),P_4(3,5),P_5(1,0),P_6(3,0) P1(−3,0),P2(−1,0),P3(−3,5),P4(3,5),P5(1,0),P6(3,0)生成一组丰富的曲线。
- 首先指定与每个控制点关联的权重: w 1 , w 2 , w 3 , w 4 , w 5 , w 6 w_1,w_2,w_3,w_4,w_5,w_6 w1,w2,w3,w4,w5,w6,通常我们假设每个权重 w i > 0 w_i>0 wi>0,所有权重之和等于1,但这不是必需的。这些权重可以是任何正数。
- 创建一组基于给定权重的节点 a 0 , a 1 , a 2 , a 3 , a 4 , a 5 , a 6 a_0,a_1,a_2,a_3,a_4,a_5,a_6 a0,a1,a2,a3,a4,a5,a6,比如: w i = a i + 1 − a i , i = 0 , 1 , 2 , . . . , 5 w_i=a_{i+1}-a_i,i=0,1,2,...,5 wi=ai+1−ai,i=0,1,2,...,5
- 对于上述定义的每个区间 [ a i , a i + 1 ] [a_i,a_{i+1}] [ai,ai+1],根据(17)建立样条基函数 B [ a i , a i + 1 ] , δ ( n ) ( t ) B_{[a_i,a_{i+1}],\delta}^{(n)}(t) B[ai,ai+1],δ(n)(t)
- 将设计曲线参数化表示为:
P ( t ) = ∑ i = 1 6 P i B [ a i , a i + 1 ] , δ ( n ) ( t ) (21) P(t)=\sum_{i=1}^6P_iB_{[a_i,a_{i+1}],\delta}^{(n)}(t)\tag{21} P(t)=i=1∑6PiB[ai,ai+1],δ(n)(t)(21)
图9所示的一些曲线是基于上述过程设计的。图9(a)中所示的曲线是使用不同的权重集设计的,但是
δ
\delta
δ值相同。从图中我们可以看出,这种使用PSP样条设计曲线的方法与NURBS具有相同的优势。但是,在设计方案中引入参数
δ
\delta
δ为形状设计提供一个额外的灵活性和维数。如图9(b)所示,通过在基函数中使用不同的
δ
\delta
δ值,可以生成各种曲线。
使用非等权重设计的更多示例曲线如图10和图11所示。
由于PSP样条基函数与B样条基函数既有完全相同的性质,因此使用PSP样条基函数设计的曲线与B样条曲线具有类似的性质,例如凸包性、线性精度。
6.2. Curve blending
所需曲线也可以描述为一系列简单的预制几何图元的混合,例如线段,二次和其他数学定义的参数曲线。在(20)中,可以使用以参数形式表示的一系列形状基本体来指定所需曲线的几何特征,而不是使用一系列控制点。也就是说,曲线可以设计为以下形式:
∑
i
=
0
n
P
i
(
t
)
B
[
t
i
.
t
i
+
1
]
,
δ
(
m
)
(
t
)
(22)
\sum_{i=0}^nP_i(t)B_{[t_i.t_{i+1}],\delta}^{(m)}(t)\tag{22}
i=0∑nPi(t)B[ti.ti+1],δ(m)(t)(22)
式中,
P
i
(
t
)
P_i(t)
Pi(t)是一组拒不定义的参数化曲线,
i
=
0
,
1
,
.
.
.
,
n
i=0,1,...,n
i=0,1,...,n
图12中显示的曲线是这样设计的,它是螺旋曲线与圆的混合。这一想法在重建领域非常有用,因为要设计的部分曲线是使用从一些真实世界对象采样的数据重建的。通过这种曲线设计方法,可以逐个设计曲线。这些单独设计的曲线不必采用相同的数学形式。根据设计的便利性,它们可以用不同的方式表达。例如,设计曲线的某些部分可使用正弦和余弦函数表示,而其他一些部分则设计为多项式或分段多项式曲线。当这些曲线组合成一段时,可以通过混合范围控制参数 δ \delta δ选择合适的值和构建相关PSP样条基函数的区间长度来保持其主要原始形状特征。
通过使用PSP样条基函数的保形特征,曲线设计实践中使用的各种设计思想可以作为这种广义曲线设计技术的特例以更直观的方式轻松实现。例如,类似于Hermite曲线的设计方案能直接表示为(22)中给出的形式。假设运动粒子的路径有由数据
P
i
,
v
i
,
i
=
0
,
1
,
2
,
.
.
.
,
n
P_i,v_i,i=0,1,2,...,n
Pi,vi,i=0,1,2,...,n的序列描述,代表粒子在不同时刻的位置和速度。然后可以使用数据插值或近似的思想以稍微不同的方式表示路径。例如,当要求曲线插值指定的位置和速度时,可以使用以下形式的二次PSP样条基函数
B
[
a
i
,
a
i
+
1
]
,
δ
(
2
)
(
t
)
B_{[a_i,a_{i+1}],\delta}^{(2)}(t)
B[ai,ai+1],δ(2)(t)来表示路径:
P
(
t
)
=
∑
i
=
0
n
(
P
i
+
(
t
−
t
i
)
v
i
)
B
[
a
i
,
a
i
+
1
]
,
δ
(
2
)
(
t
)
(23)
P(t)=\sum_{i=0}^n(P_i+(t-t_i)v_i)B_{[a_i,a_{i+1}],\delta}^{(2)}(t)\tag{23}
P(t)=i=0∑n(Pi+(t−ti)vi)B[ai,ai+1],δ(2)(t)(23)
其中
t
i
∈
[
a
i
,
a
i
+
1
]
t_i\in[a_i,a_{i+1}]
ti∈[ai,ai+1]并且
B
[
a
i
,
a
i
+
1
]
,
δ
(
2
)
(
t
i
)
=
1
B_{[a_i,a_{i+1}],\delta}^{(2)}(t_i)=1
B[ai,ai+1],δ(2)(ti)=1。可以直接看出,在时刻
t
i
t_i
ti,设计的曲线不仅会插值位置
P
i
P_i
Pi,还会插值速度
v
i
v_i
vi。也就是说,当
B
[
a
i
,
a
i
+
1
]
,
δ
(
2
)
(
t
i
)
=
1
,
P
(
t
i
)
=
P
i
,
P
˙
(
t
i
)
=
v
i
B_{[a_i,a_{i+1}],\delta}^{(2)}(t_i)=1,P(t_i)=P_i,\dot P(t_i)=v_i
B[ai,ai+1],δ(2)(ti)=1,P(ti)=Pi,P˙(ti)=vi.
图13展示出了以这种方式设计的示例曲线。
以(23)中所示形式表示的曲线也可以用于设计包含多个平坦部分的曲线,方法是对每个线段进行部分插值 P i + ( t − t i ) v i P_i+(t-t_i)v_i Pi+(t−ti)vi,它可以被认为是匀速直线运动中物体的轨迹。基于位置插值和基于线段插值的区别在于与 P i + ( t − t i ) v i P_i+(t-t_i)v_i Pi+(t−ti)vi相关联的样条基函数 B [ a i , a i + 1 ] , δ ( 2 ) ( t ) B_{[a_i,a_{i+1}],\delta}^{(2)}(t) B[ai,ai+1],δ(2)(t)的形状。 对于基于线段的插值,应使用平顶样条曲线基函数,其中函数在子区间 [ a i , a i + 1 ] [a_i,a_{i+1}] [ai,ai+1]内取值1。
这个想法立即导致了一个简单的插值方案。设
P
i
,
i
=
0
,
1
,
2
,
.
.
.
,
n
P_i,i=0,1,2,...,n
Pi,i=0,1,2,...,n是要插值的数据点序列。对于每对控制点
P
i
和
P
i
+
1
P_i和P_{i+1}
Pi和Pi+1,设
C
i
(
t
)
C_i(t)
Ci(t)为局部曲线,分别对
t
=
t
i
,
t
=
t
i
+
1
t=t_i,t=t_{i+1}
t=ti,t=ti+1这两个点进行插值。然后,插值所有数据点的曲线可以表示为这些局部设计曲线的混合。一种简单的方法是使用由每对控制点定义的直线。对于任何节点序列
t
i
,
i
=
0
,
1
,
2
,
.
.
.
,
n
,
且
当
δ
≤
t
i
+
1
−
t
i
t_i,i=0,1,2,...,n,且当\delta≤t_{i+1}-t_i
ti,i=0,1,2,...,n,且当δ≤ti+1−ti,以下参数曲线将插值所有控制点:
P
(
t
)
=
∑
i
=
0
n
(
(
1
−
T
i
)
P
i
+
T
i
P
i
+
1
)
B
[
t
i
,
t
i
+
1
]
,
δ
(
2
)
(
t
)
(24)
P(t)=\sum_{i=0}^n((1-T_i)P_i+T_iP_{i+1})B_{[t_i,t_{i+1}],\delta}^{(2)}(t)\tag{24}
P(t)=i=0∑n((1−Ti)Pi+TiPi+1)B[ti,ti+1],δ(2)(t)(24)
其中
T
i
=
t
−
t
i
t
i
+
1
−
t
i
T_i=\frac{t-t_i}{t_{i+1}-t_i}
Ti=ti+1−tit−ti
图14中展示了这种方式设计的曲线。
类似的想法也能被应用于设计一条部分插值控制多边形的曲线。设
ϵ
\epsilon
ϵ为正数,用于指定希望将给定控制多边形的边保持为设计曲线的一部分的程度。要求曲线通过以下方式进行设计:
P
(
t
)
=
∑
i
=
0
n
(
(
1
−
T
i
,
ϵ
)
P
i
+
T
i
,
ϵ
P
i
+
1
)
B
[
a
i
,
a
i
+
1
]
,
δ
(
2
)
(
t
)
,
(25)
P(t)=\sum_{i=0}^n((1-T_{i,\epsilon})P_i+T_{i,\epsilon}P_{i+1})B_{[a_i,a_{i+1}],\delta}^{(2)}(t),\tag{25}
P(t)=i=0∑n((1−Ti,ϵ)Pi+Ti,ϵPi+1)B[ai,ai+1],δ(2)(t),(25)
其中
T
i
,
ϵ
=
t
−
t
i
+
ϵ
t
i
+
1
−
t
i
+
2
ϵ
T_{i,\epsilon}=\frac{t-t_i+\epsilon}{t_{i+1}-t_i+2\epsilon}
Ti,ϵ=ti+1−ti+2ϵt−ti+ϵ
图15展示的曲线是使用不同的 δ \delta δ和 ϵ \epsilon ϵ设计的
众所周知,将B样条曲线拟合到数据集通常涉及到求解线性方程组,当要插值一组非常大的数据点时,这可能是代价高的。然而,使用上述方法,曲线拟合问题变成了混合一组局部指定的曲线的任务,这不仅实现简单,计算效率高,而且更加灵活。
与二阶Hermite曲线设计类似,可以设计一条曲线,使用局部定义的二次曲线插值位置、速度和加速度。设
P
i
,
v
i
,
a
i
P_i,v_i,a_i
Pi,vi,ai是运动中的粒子的位置,速度和加速度,对应于时刻
t
i
,
i
=
0
,
1
,
2
,
.
.
.
,
n
t_i,i=0,1,2,...,n
ti,i=0,1,2,...,n。那么粒子的轨迹可以用以下的三次PSP样条基函数
B
[
a
i
,
a
i
+
1
]
,
δ
(
3
)
(
t
)
B_{[a_i,a_{i+1}],\delta}^{(3)}(t)
B[ai,ai+1],δ(3)(t)表示的曲线来近似表示:
P
(
t
)
=
∑
i
=
0
n
(
P
i
+
(
t
−
t
i
)
v
i
+
1
2
(
t
−
t
i
)
2
a
i
)
B
[
a
i
,
a
i
+
1
]
,
δ
(
3
)
(
t
)
(26)
P(t)=\sum_{i=0}^n(P_i+(t-t_i)v_i+\frac{1}{2}(t-t_i)^2a_i)B_{[a_i,a_{i+1}],\delta}^{(3)}(t)\tag{26}
P(t)=i=0∑n(Pi+(t−ti)vi+21(t−ti)2ai)B[ai,ai+1],δ(3)(t)(26)
显然,当
B
[
a
i
,
a
i
+
1
]
,
δ
(
3
)
(
t
i
)
=
1
B_{[a_i,a_{i+1}],\delta}^{(3)}(t_i)=1
B[ai,ai+1],δ(3)(ti)=1,将有
P
(
t
i
)
=
P
i
,
P
˙
(
t
i
)
=
v
i
,
P
¨
(
t
i
)
=
a
i
P(t_i)=P_i,\dot P(t_i)=v_i,\ddot P(t_i)=a_i
P(ti)=Pi,P˙(ti)=vi,P¨(ti)=ai
这是因为在 t = t i t=t_i t=ti时,当 B [ a i , a i + 1 ] , δ ( 3 ) ( t i ) = 1 B_{[a_i,a_{i+1}],\delta}^{(3)}(t_i)=1 B[ai,ai+1],δ(3)(ti)=1,则 B ˙ [ a i , a i + 1 ] , δ ( 3 ) ( t i ) = B ¨ [ a i , a i + 1 ] , δ ( 3 ) ( t i ) = 0 \dot B_{[a_i,a_{i+1}],\delta}^{(3)}(t_i)=\ddot B_{[a_i,a_{i+1}],\delta}^{(3)}(t_i)=0 B˙[ai,ai+1],δ(3)(ti)=B¨[ai,ai+1],δ(3)(ti)=0
众所周知,某些二次曲线(如圆和椭圆)不能精确地表示为多项式曲线。然而,它们可以用PSP样条曲线相当精确地近似。图16直观地显示了如何使用基于四个控制点的PSP样条曲线来近似椭圆。只有特写图形才能显示两条曲线之间的差异。
7. Freeform surface design using PSP-spline curves
与常规样条曲面一样,可以使用PSP样条曲线生成各种自由曲面,例如直纹曲面和旋转曲面。图17中显示了一些旋转表面的示例。用于生成这些曲面的轮廓曲线是基于同一组控制点构造的PSP样条曲线。
与传统的张量积B样条曲面类似,曲面片可以通过以下方式生成为PSP样条基函数的张量积:
S
(
u
,
v
)
=
∑
i
,
j
=
1
n
P
i
,
j
B
[
a
i
,
a
i
+
1
]
,
δ
1
(
m
)
(
u
)
B
[
b
j
,
b
j
+
1
]
,
δ
2
(
m
)
(
v
)
(27)
S(u,v)=\sum_{i,j=1}^nP_{i,j}B_{[a_i,a_{i+1}],\delta_1}^{(m)}(u)B_{[b_j,b_{j+1}],\delta_2}^{(m)}(v)\tag{27}
S(u,v)=i,j=1∑nPi,jB[ai,ai+1],δ1(m)(u)B[bj,bj+1],δ2(m)(v)(27)
张量积PSP样条曲面的特征如图18所示。与传统的张量积B样条曲面不同,可以生成一组PSP样条曲面片,对应于(27)中保形参数
δ
1
和
δ
2
\delta_1和\delta_2
δ1和δ2的不同值以及不同支撑大小的PSP样条基函数。
当PSP样条基函数被设计为具有不同大小的支撑时,通过直观地调整(27)中使用的保形参数 δ 1 和 δ 2 \delta_1和\delta_2 δ1和δ2,可以使用更小的控制点集生成丰富的几何形状集。图19显示了以这种方式构建的一些曲面。
如图19所示,PSP样条曲面的关键优势在于其在设计自由几何形状时的通用性和效率。
8. 2D PSP-spline basis functions and their application in freeform surface modeling
基于张量积的自由曲面是使用从矩形网格构建的样条基函数设计的,当指定的控制点相对规则地分布时,它提供了一种构建自由曲面的简单方法。然而,许多数据集是非常不规则的,特别是那些从真实世界物体表面采样的数据。在许多情况下,可能需要构造对应于任意指定多边形的样条基函数。
与一维样条基函数的构造相比,构造与一元样条基函数具有相似几何性质的二维光滑分段多项式样条基函数是一项极其艰巨的任务。在一维情况下,点是将实线分成两部分的唯一几何对象类型,而区间是作为一元样条基函数支撑的唯一连接集类型。然而,在更高的维度上,情况要复杂得多。例如,在2D的情况下,有无限多种不同类型的几何对象可以将平面分隔为两个简单连接的区域,并且有各种不同类型的简单连接集。因此,在实践中,如何创建所需的二元样条基函数取决于空间的划分方式。如果用规则网格划分空间,则可以很容易地建立一组多元样条,作为单变量B样条的张量积。然而,当使用不规则网格对空间进行分区时,我们仍然没有一种理论上优雅且实用的技术来从给定的分区多边形构造样条基函数集。尽管已经提出了各种技术来构建二元样条基函数,如长方体样条和单纯形样条,但它们的评估代价通常非常高,尤其是在评估具有高度平滑度的二元样条基函数时[12]。提出了一些代价低的样条曲线。例如,在[13]中,引入了基于边的分段多项式函数,从任意指定的多边形集构建样条曲线基函数。但是,这些函数通常不是加法函数。此外,在传统的基于样条曲线的形状设计技术中,相应的形状设计方法通常不具备一些良好的几何特性。在本文中,我们演示了如何使用[1]中介绍的二元样条基函数进行参数化曲面设计。
8.1 Bivariate PSP-spline basis functions
设
□
⊂
R
2
\Box \subset R^2
□⊂R2是一个大小为
2
δ
×
2
δ
2\delta \times 2\delta
2δ×2δ的正方形且
δ
>
0
\delta>0
δ>0,以坐标原点为中心。对于任意给定的多边形
Δ
⊂
R
2
\Delta \subset R^2
Δ⊂R2,我们用以下方式定义函数序列:
B
Δ
,
δ
(
0
)
(
u
,
v
)
=
χ
Δ
(
u
,
v
)
=
{
1
,
(
u
,
v
)
∈
Δ
;
0
,
(
u
,
v
)
∉
Δ
,
B
Δ
,
δ
(
n
)
(
u
,
v
)
=
1
4
δ
2
∬
R
2
B
Δ
,
δ
(
n
−
1
)
(
s
,
t
)
χ
□
(
s
−
u
,
t
−
v
)
d
s
d
t
,
(
n
>
0
)
(28)
B_{\Delta,\delta}^{(0)}(u,v)=\chi_{\Delta}(u,v)=\begin{cases} 1,(u,v)\in\Delta;\\ 0,(u,v)\notin\Delta \end{cases},\\ B_{\Delta,\delta}^{(n)}(u,v)=\frac{1}{4\delta^2}\iint_{\R^2}B_{\Delta,\delta}^{(n-1)}(s,t)\chi_{\Box}(s-u,t-v)dsdt,(n>0)\tag{28}
BΔ,δ(0)(u,v)=χΔ(u,v)={1,(u,v)∈Δ;0,(u,v)∈/Δ,BΔ,δ(n)(u,v)=4δ21∬R2BΔ,δ(n−1)(s,t)χ□(s−u,t−v)dsdt,(n>0)(28)
其中:
χ
Δ
(
u
,
v
)
=
{
1
,
(
u
,
v
)
∈
[
−
δ
,
δ
]
×
[
−
δ
,
δ
]
;
0
,
o
t
h
e
r
w
i
s
e
.
\chi_{\Delta}(u,v)=\begin{cases} 1,(u,v)\in[-\delta,\delta]\times[-\delta,\delta];\\ 0,otherwise. \end{cases}
χΔ(u,v)={1,(u,v)∈[−δ,δ]×[−δ,δ];0,otherwise.
在积分中的参数
δ
\delta
δ起着与(11)中使用的参数类似的作用,可用于指定希望轮廓曲线
B
Δ
,
δ
(
0
)
(
u
,
v
)
=
0.5
B_{\Delta,\delta}^{(0)}(u,v)=0.5
BΔ,δ(0)(u,v)=0.5在多大程度上近似控制多边形。
如[1]中所示,上面定义的积分可以用显式形式表示。
设
v
=
(
α
,
β
)
,
α
>
0
,
β
>
0
v=(\alpha,\beta),\alpha>0,\beta>0
v=(α,β),α>0,β>0,是表示多边形边方向的向量。对于任何正数
n
>
0
n>0
n>0,用分段多项式表示的二元函数可定义如下:
A
α
,
β
(
n
)
(
u
,
v
)
=
{
0
,
v
≥
m
i
n
{
β
α
u
,
0
}
;
1
(
2
n
)
!
α
n
β
n
(
β
u
−
α
v
)
2
n
,
v
<
m
i
n
{
β
α
u
,
0
}
,
u
≤
0
;
∑
k
=
1
n
(
−
1
)
n
+
k
α
k
(
n
−
k
)
!
(
n
+
k
)
!
β
k
u
n
−
k
v
n
+
k
,
v
<
m
i
n
{
β
α
u
,
0
}
,
u
>
0
(29)
A_{\alpha,\beta}^{(n)}(u,v)=\begin{cases} 0,v≥min \begin{Bmatrix}\frac{\beta}{\alpha}u,0 \end{Bmatrix};\\ \frac{1}{(2n)!\alpha^n \beta^n}(\beta u-\alpha v)^{2n},v<min \begin{Bmatrix}\frac{\beta}{\alpha}u,0 \end{Bmatrix},u≤0;\\ \sum_{k=1}^n\frac{(-1)^{n+k}\alpha^k}{(n-k)!(n+k)!\beta^k}u^{n-k}v^{n+k},v<min \begin{Bmatrix}\frac{\beta}{\alpha}u,0 \end{Bmatrix},u>0\tag{29} \end{cases}
Aα,β(n)(u,v)=⎩⎪⎨⎪⎧0,v≥min{αβu,0};(2n)!αnβn1(βu−αv)2n,v<min{αβu,0},u≤0;∑k=1n(n−k)!(n+k)!βk(−1)n+kαkun−kvn+k,v<min{αβu,0},u>0(29)
可以直接证明分段多项式函数
A
α
,
β
(
n
)
(
u
,
v
)
A_{\alpha,\beta}^{(n)}(u,v)
Aα,β(n)(u,v)是非负且
C
n
−
1
C^{n-1}
Cn−1连续的。
使用函数
A
α
,
β
(
n
)
(
u
,
v
)
A_{\alpha,\beta}^{(n)}(u,v)
Aα,β(n)(u,v),给定
δ
>
0
\delta>0
δ>0以下的函数可以被定义为:
Ω
α
,
β
,
δ
(
n
)
(
u
,
v
)
=
1
(
4
δ
2
)
n
∑
i
=
0
n
∑
j
=
0
n
(
−
1
)
i
+
j
(
n
i
)
(
n
j
)
F
i
,
j
(
u
,
v
)
(30)
\Omega_{\alpha,\beta,\delta}^{(n)}(u,v)=\frac{1}{(4\delta^2)^n}\sum_{i=0}^n\sum_{j=0}^n(-1)^{i+j}\left(\begin{matrix}n\\i\end{matrix}\right)\left(\begin{matrix}n\\j\end{matrix}\right)F_{i,j}(u,v)\tag{30}
Ωα,β,δ(n)(u,v)=(4δ2)n1i=0∑nj=0∑n(−1)i+j(ni)(nj)Fi,j(u,v)(30)
其中:
F
i
,
j
(
u
,
v
)
=
A
α
,
β
(
n
)
(
u
+
(
n
−
2
i
)
δ
,
v
−
(
n
−
2
j
)
δ
)
F_{i,j}(u,v)=A_{\alpha,\beta}^{(n)}(u+(n-2i)\delta,v-(n-2j)\delta)
Fi,j(u,v)=Aα,β(n)(u+(n−2i)δ,v−(n−2j)δ)
正如[1]中指出的那样, Ω α , β , δ ( n ) ( u , v ) \Omega_{\alpha,\beta,\delta}^{(n)}(u,v) Ωα,β,δ(n)(u,v)是分段多项式并且是 C n − 1 C^{n-1} Cn−1连续的。此外,他也是非负的,只从区间[0,1]中取值。
现在,对于任意给定的二维多边形,可以使用 Ω α , β , δ ( n ) ( u , v ) \Omega_{\alpha,\beta,\delta}^{(n)}(u,v) Ωα,β,δ(n)(u,v)直接定义二维函数。首先,对于多边形 V 0 V_0 V0的每一个顶点,可以用非负数 α , β \alpha,\beta α,β定义以下函数:
现在考虑与给定多边形的边相关联的两个顶点
V
0
(
u
0
.
v
0
)
和
V
1
(
u
1
,
v
1
)
V_0(u_0.v_0)和V_1(u_1,v_1)
V0(u0.v0)和V1(u1,v1),二元函数可以使用(31)中引入的
V
α
,
β
,
δ
(
n
)
(
u
,
v
;
V
0
)
V_{\alpha,\beta,\delta}^{(n)}(u,v;V_0)
Vα,β,δ(n)(u,v;V0)和
V
α
,
β
,
δ
(
n
)
(
u
,
v
;
V
1
)
V_{\alpha,\beta,\delta}^{(n)}(u,v;V_1)
Vα,β,δ(n)(u,v;V1)来定义:
其中:
α
=
{
0
,
u
0
=
u
1
;
1
,
o
t
h
e
r
w
i
s
e
,
β
=
{
1
,
u
1
=
u
0
;
v
1
−
v
0
u
1
−
u
0
,
o
t
h
e
r
w
i
s
e
\alpha=\begin{cases}0,u_0=u_1;\\ 1,otherwise,\end{cases} \ \ \ \ \beta=\begin{cases}1,u_1=u_0;\\ \frac{v_1-v_0}{u_1-u_0},otherwise \end{cases}
α={0,u0=u1;1,otherwise, β={1,u1=u0;u1−u0v1−v0,otherwise
设
V
0
(
u
0
,
v
0
)
,
V
1
(
u
1
,
v
1
)
,
.
.
.
,
V
m
(
u
m
,
v
m
)
V_0(u_0,v_0),V_1(u_1,v_1),...,V_m(u_m,v_m)
V0(u0,v0),V1(u1,v1),...,Vm(um,vm)是按逆时针顺序指定的给定多边形
Δ
\Delta
Δ的m+1个顶点。然后可以证明(28)中定义的二元函数可以用以下形式显式编写:
其中
V
m
+
1
=
V
0
V_{m+1}=V_0
Vm+1=V0,并且
L
δ
(
n
)
(
u
,
v
;
V
i
,
V
j
)
L_{\delta}^{(n)}(u,v;V_i,V_{j})
Lδ(n)(u,v;Vi,Vj)是根据(32)定义的。
利用积分的性质,可以证明 B Δ , δ ( n ) ( u , v ) B_{\Delta,\delta}^{(n)}(u,v) BΔ,δ(n)(u,v)具有以下性质:
- 0 ≤ B Δ , δ ( n ) ( u , v ) ≤ 1 0≤B_{\Delta,\delta}^{(n)}(u,v)≤1 0≤BΔ,δ(n)(u,v)≤1
- B Δ , δ ( n ) ( u , v ) B_{\Delta,\delta}^{(n)}(u,v) BΔ,δ(n)(u,v)是 C n − 1 C^{n-1} Cn−1连续的
- B Δ , δ ( n ) ( u , v ) B_{\Delta,\delta}^{(n)}(u,v) BΔ,δ(n)(u,v)是分段多项式
- 如果多边形 Δ \Delta Δ是有限的,则 B Δ , δ ( n ) ( u , v ) B_{\Delta,\delta}^{(n)}(u,v) BΔ,δ(n)(u,v)具有有限支撑
- B Δ , δ ( n ) ( u , v ) B_{\Delta,\delta}^{(n)}(u,v) BΔ,δ(n)(u,v)具有可加性,也就是说如果两个多边形 Δ 1 和 Δ 2 \Delta_1和\Delta_2 Δ1和Δ2不相交或者它们只在边上相交,则
B Δ 1 ∪ Δ 2 , δ ( n ) ( u , v ) = B Δ 1 , δ ( n ) ( u , v ) + B Δ 2 , δ ( n ) ( u , v ) B_{\Delta_1 \cup \Delta_2,\delta}^{(n)}(u,v)=B_{\Delta_1,\delta}^{(n)}(u,v)+B_{\Delta_2,\delta}^{(n)}(u,v) BΔ1∪Δ2,δ(n)(u,v)=BΔ1,δ(n)(u,v)+BΔ2,δ(n)(u,v)
- 单位分解。如果
∪ k Δ k = R 2 , a r e a ( Δ i ∩ i ≠ j Δ j ) = 0 \cup_k \Delta_k=R^2,area(\Delta_i \cap_{i≠j}\Delta_j)=0 ∪kΔk=R2,area(Δi∩i=jΔj)=0
那么 ∑ k B Δ k , δ ( n ) ( u , v ) = 1 \sum_k B_{\Delta k,\delta}^{(n)}(u,v)=1 ∑kBΔk,δ(n)(u,v)=1
图20显示了根据(33)从两组给定多边形构建的两组二维PSP样条基函数。用于构造二维样条基函数的多边形可以是凸的也可以是非凸的。
8.2. Design freeform surfaces using bivariate PSP-splines
8.2.1. Control surface patch based surface design
假设所需曲面可以由一组曲面片
P
i
(
u
,
v
)
,
i
=
0
,
1
,
2
,
.
.
.
,
m
P_i(u,v),i=0,1,2,...,m
Pi(u,v),i=0,1,2,...,m表示,每一个都局部定义在多边形
Δ
i
,
i
=
0
,
1
,
.
.
.
,
m
\Delta_i,i=0,1,...,m
Δi,i=0,1,...,m上。曲面能通过以下形式进行设计:
S
(
u
,
v
)
=
∑
i
=
0
m
P
i
(
u
,
v
)
B
Δ
i
,
δ
(
n
)
(
u
,
v
)
(34)
S(u,v)=\sum_{i=0}^mP_i(u,v)B_{\Delta_i,\delta}^{(n)}(u,v)\tag{34}
S(u,v)=i=0∑mPi(u,v)BΔi,δ(n)(u,v)(34)
使用这种形状设计方法,可以首先在给定的参数空间上将所需形状分解为一组局部指定的简单几何形状。对于这些局部定义形状的每个域,可以建立二维PSP样条基函数。然后,可以按照(34)中所示的方式直接混合所需形状,其中
δ
\delta
δ可以用作控制形状合成技术的混合范围的参数。作为说明,图21中呈现的表面均以这种方式生成。
(34)中表示曲面的特殊情况是每个 P i ( u , v ) P_i(u,v) Pi(u,v)只是一个控制点, i = 0 , 1 , . . . , m i=0,1,...,m i=0,1,...,m,这可以看作是对传统张量积样条曲面的推广。二元PSP样条的主要优点是它允许我们使用非常不规则的分布的控制点设计自由曲面。图22显示了使用从真实人脸上采集的一组控制点构建的PSP样条曲面。
8.2.2. Surface design using localized geometric transformations
实际上,曲面片的局部几何特征也可以通过执行局部变换来指定。二维PSP样条基函数的形状保留功能可用于控制在哪个区域执行变换。假设在参数区间
[
a
,
b
]
×
[
c
,
d
]
[a,b]\times[c,d]
[a,b]×[c,d]上定义了一个参数曲面。设
τ
\tau
τ为变换中涉及的参数,例如,旋转变换的旋转角,
B
Δ
,
δ
(
n
)
(
u
,
v
)
B_{\Delta,\delta}^{(n)}(u,v)
BΔ,δ(n)(u,v)建立在多边形
Δ
\Delta
Δ上的PSP样条基函数,
[
a
,
b
]
×
[
c
,
d
]
[a,b]\times[c,d]
[a,b]×[c,d]的子区域,将在其上执行转换。然后,可以按以下方式对变换进行局部化,以便变换仅对与参数化区域相对应的曲面部分有效:
τ
1
(
u
,
v
)
=
τ
×
B
Δ
,
δ
(
n
)
(
u
,
v
)
+
I
I
×
(
1
−
B
Δ
,
δ
(
n
)
(
u
,
v
)
)
\tau_1(u,v)=\tau\times B_{\Delta,\delta}^{(n)}(u,v)+II\times(1-B_{\Delta,\delta}^{(n)}(u,v))
τ1(u,v)=τ×BΔ,δ(n)(u,v)+II×(1−BΔ,δ(n)(u,v))
其中,
I
I
II
II表示与标识转换对应的参数。例如,如果
τ
\tau
τ表示旋转角度,则
I
I
=
0
II=0
II=0。
图23显示了以这种方式通过执行局部变换生成的一些曲面。
8.2.3. Surface editing using bivariate PSP-splines
上述二元样条基函数是一种非常有用的形状编辑方法。在现实世界中,普通家庭和办公设施的一个典型特征是,这些物体的表面有各种各样图案,从产品标识到各种浮雕装饰。通过引入二元PSP样条,可以很容易地设计凸纹图案的几何形状。拉伸曲面指定区域的一种方法是通过曲面混合。假设
S
1
(
u
,
v
)
和
S
2
(
u
,
v
)
S_1(u,v)和S_2(u,v)
S1(u,v)和S2(u,v)是两个曲面,分别对应于要从创建凸纹图案的基础曲面和要将曲面
S
1
(
u
,
v
)
S_1(u,v)
S1(u,v)上的指定区域拉伸到的外部曲面。设
Δ
\Delta
Δ为表示二维图案的多边形,
B
Δ
,
δ
(
n
)
(
u
,
v
)
B_{\Delta,\delta}^{(n)}(u,v)
BΔ,δ(n)(u,v)为对应的二元样条基函数。然后,可通过以下方式在表面
S
1
(
u
,
v
)
S_1(u,v)
S1(u,v)上生成由多边形
Δ
\Delta
Δ设计的凸纹图案:
S
(
u
,
v
)
=
(
1
−
B
Δ
(
n
)
(
u
,
v
)
)
S
1
(
u
,
v
)
+
B
Δ
(
n
)
(
u
,
v
)
S
2
(
u
,
v
)
(35)
S(u,v)=(1-B_{\Delta}^{(n)}(u,v))S_1(u,v)+B_{\Delta}^{(n)}(u,v)S_2(u,v)\tag{35}
S(u,v)=(1−BΔ(n)(u,v))S1(u,v)+BΔ(n)(u,v)S2(u,v)(35)
图24所展示的几何图案都是按照这一理念设计的。
9. Summary
本文基于新引入的PSP样条基函数,提出了一种新的样条技术。PSP样条基函数与传统的B样条基函数相比有几个显著的特点。对于一维样条基函数,它们是基于区间的。对于任意给定的区间,一个n次样条基函数可以直接建立为区间两端对应的两个n次光滑单位步长函数的差。其次,它们可以使用Heaviside单位步长函数显式表示。此外,PSP样条曲线设计技术与传统NURBS具有相似的功能,它可以通过使用非等间距区间来构建PSP样条基函数,从而对不同的控制点进行不同的加权。PSP样条基函数最重要的特征是,当它被用作混合不同预制形状的方法时,它可以被构建为部分形状保持。在二维情况下,还提出了一种从任意给定的二维多边形网络集构造二元PSP样条基函数的方法,这可以看作是常规的基于张量积的样条基函数的一种推广。除了在自由曲面设计中的直接应用外,二元PSP样条曲线还可以作为编辑几何曲面的有效工具。与传统的B样条形状设计技术相比,使用PSP样条进行形状设计更加灵活。当将设计的形状指定为多边形时,它表现为一种多边形边缘平滑器,即可以将平滑曲线或曲面设计为将控制多边形或控制多边形网格近似到任何预设精度。因此,可以从单个控制点集或控制多边形网格生成丰富的曲线或曲面集。