GAMES102几何建模与处理(五)

一、 使用幂基来表达曲线

1、二次多项式曲线(抛物线)

f ( t ) = a t 2 + b t + c f(t)=at^2+bt+c f(t)=at2+bt+c
几何观点:系数顶点
基函数为这些顶点的组合权系数
缺点:
1、系数顶点与曲线本身无直观的联系:无几何意义!
2、不利于用户来交互修改曲线:设计建模
在这里插入图片描述

二、建模的两种形式

f ( t ) = a t 2 + b t + c f(t)=at^2+bt+c f(t)=at2+bt+c

1、重建

逆向工程:形状已经有了,将其“猜”出来
采样 → \rightarrow 拟合:需要函数空间足够丰富(表达能力够)
代数观点:{𝑎, 𝑏, 𝑐}作为基函数的组合权系数

2、设计

自由设计:凭空产生,或从一个简单的形状编辑得到
交互式编辑:几何直观性要好
几何观点:基函数 { 𝑡 2 , 𝑡 , 1 } \{𝑡^2, 𝑡, 1\} {t2,t,1}作为控制点的组合权系数

三、使用Bernstein基函数表达

f ( t ) = ( 1 1 ) t 2 + ( − 2 0 ) t + ( 1 0 ) → f ( t ) = ( 1 0 ) ( 1 − t ) 2 + ( 0 0 ) 2 t ( 1 − t ) + ( 0 1 ) t 2 f(t)= \left(\begin{matrix} 1 \\ 1 \end{matrix}\right)t^2+\left(\begin{matrix} -2 \\ 0 \end{matrix}\right)t+\left(\begin{matrix} 1\\ 0 \end{matrix}\right) \rightarrow f(t)=\left(\begin{matrix} 1 \\ 0 \end{matrix}\right)(1-t)^2+\left(\begin{matrix} 0 \\ 0 \end{matrix}\right)2t(1-t)+\left(\begin{matrix} 0\\ 1 \end{matrix}\right)t^2 f(t)=(11)t2+(20)t+(10)f(t)=(10)(1t)2+(00)2t(1t)+(01)t2
在这里插入图片描述

  • 系数顶点与曲线关联性强,具有很好的几何意义
  • 对于交互式曲线设计更直观

四、Bezier曲线

n次Bezier曲线:n+1个顶点
Bezier曲线的性质来源于Bernstein基函数的性质
(曲线是控制顶点的线性组合构成的,基函数提供了组合系数)
在这里插入图片描述

五、Bernstein基函数及Bezier曲线的性质

1、Bernstein基函数

Bernstein基函数: { B 0 ( n ) , B 1 ( n ) , ⋯   , B n ( n ) } \{B_0^{(n)},B_1^{(n)},\cdots,B_n^{(n)}\} {B0(n),B1(n),,Bn(n)}
𝑛次(𝑛+1)阶Bernstein基函数:
B i ( n ) ( t ) = ( n i ) t i ( 1 − t ) n − i = B 第 i 个 基 函 数 ( d e g r e e ) B^{(n)}_i(t)=\left(\begin{matrix} n \\ i \end{matrix}\right) t^i (1-t)^{n-i}=B^{(degree)}_{第i个基函数} Bi(n)(t)=(ni)ti(1t)ni=Bi(degree)
对称性:
1、 B i ( n ) ( t ) = B n − i ( n ) ( 1 − t ) B^{(n)}_i(t)=B^{(n)}_{n-i}(1-t) Bi(n)(t)=Bni(n)(1t)
2、 B i ( n ) ( t ) B^{(n)}_i(t) Bi(n)(t) t = i n t=\frac{i}{n} t=ni达到最大值

2、性质

1、正性(非负性)+权性

  • B i ( n ) ( t ) ≥ 0 , ∀ t ∈ [ 0 , 1 ] B^{(n)}_i(t)\geq 0,\forall t \in[0,1] Bi(n)(t)0,t[0,1]
  • ∑ i = 1 n B i ( n ) ( t ) = 1 , ∀ t ∈ [ 0 , 1 ] \sum^n_{i=1}B^{(n)}_i(t)=1,\forall t \in[0,1] i=1nBi(n)(t)=1,t[0,1]
    ⇓ \Downarrow
    Bezier曲线的凸包性

2、基性

  • B = { B ( n ) 0 , B ( n ) 1 , ⋯   , B ( n ) n } B=\{B^(n)_0,B^(n)_1,\cdots,B^(n)_n\} B={B(n)0,B(n)1,,B(n)n}是次数不高于n的多项式集合(空间)的一组基
  • 与幂基可以相互线性表达:
    在这里插入图片描述

3、递推公式

  • 基函数的递推公式
    B i ( n ) ( t ) = ( 1 − t ) B i ( n − 1 ) ( t ) + t B i − 1 ( n − 1 ) ( 1 − t ) B^{(n)}_i(t) = (1-t)B^{(n-1)}_i(t)+tB^{(n-1)}_{i-1}(1-t) Bi(n)(t)=(1t)Bi(n1)(t)+tBi1(n1)(1t)
    B 0 0 ( t ) = 1 , B i n ( t ) = 1 , i ∉ { 0 , ⋯   , n } B^{0}_0(t) =1,B^{n}_i(t) =1,i \notin \{0,\cdots,n\} B00(t)=1,Bin(t)=1,i/{0,,n}
    ( n − 1 i ) + ( n − 1 i − 1 ) = ( n i ) \left(\begin{matrix} n-1 \\ i \end{matrix}\right) +\left(\begin{matrix} n-1 \\ i-1 \end{matrix}\right)=\left(\begin{matrix} n\\ i \end{matrix}\right) (n1i)+(n1i1)=(ni)可推导得到
    高阶的基函数由2个低阶的基函数“升阶”得到利于保持一些良好的性质。

4、端点插值性

  • B 0 n ( t ) = 0 , B 1 n ( 0 ) = ⋯ = B n n ( 0 ) = 0 B^{n}_0(t) =0,B^{n}_1(0)=\cdots=B^{n}_n(0)=0 B0n(t)=0,B1n(0)==Bnn(0)=0
  • B 0 n ( t ) = ⋯ = B n − 1 n ( 0 ) = 0 , B n n ( 0 ) = 1 B^{n}_0(t) =\cdots=B^{n}_{n-1}(0)=0,B^{n}_n(0)=1 B0n(t)==Bn1n(0)=0,Bnn(0)=1
    ⇓ \Downarrow
  • Bezier曲线经过首末两个控制顶点 p 0 , p n p_0,p_n p0,pn

5、导数

  • d d t B i n ( t ) = n [ B i − 1 n − 1 ( t ) − B i n − 1 ( t ) ] \frac{d}{dt}B^{n}_i(t)=n[B^{n-1}_{i-1}(t)-B^{n-1}_i(t)] dtdBin(t)=n[Bi1n1(t)Bin1(t)]
  • d 2 d t 2 B i n ( t ) = n ( n − 1 ) [ B i − 2 n − 2 ( t ) − 2 B i − 1 n − 2 ( t ) + B i n − 2 ( t ) ] \frac{d^2}{dt^2}B^{n}_i(t)=n(n-1)[B^{n-2}_{i-2}(t)-2B^{n-2}_{i-1}(t)+B^{n-2}_{i}(t)] dt2d2Bin(t)=n(n1)[Bi2n2(t)2Bi1n2(t)+Bin2(t)]
  • Bezier曲线的导数(切线)
    p 0 , ⋯   , p n , f ( t ) = ∑ i = 0 n B i n ( t ) p i p_0,\cdots,p_n,f(t)=\sum^n_{i=0}B^n_i(t)p_i p0,,pn,f(t)=i=0nBin(t)pi
    • f ′ ( t ) = n ∑ i = 0 n − 1 B i n − 1 ( t ) ( p i + 1 − p i ) f^{'}(t)=n\sum^{n-1}_{i=0}B^{n-1}_i(t)(p_{i+1}-p_i) f(t)=ni=0n1Bin1(t)(pi+1pi)
    • f [ r ] ( t ) = n ! ( n − r ) ! ∑ i = 0 n − r B i n − 1 ( t ) ⋅ △ r p i f^{[r]}(t)=\frac{n!}{(n-r)!}\sum^{n-r}_{i=0}B^{n-1}_i(t) \cdot \triangle^r p_i f[r](t)=(nr)!n!i=0nrBin1(t)rpi
  • 端点性质
    端点插值:
    f ( 0 ) = p 0 , f ( 1 ) = p n f(0)=p_0,f(1)=p_n f(0)=p0,f(1)=pn
    切线方向与边相同:
    f ′ ( 0 ) = n [ p 1 − p 0 ] f^{'}(0)=n[p_1-p_0] f(0)=n[p1p0]
    f ′ ( 1 ) = n [ p n − 1 − p n ] f^{'}(1)=n[p_{n-1}-p_{n}] f(1)=n[pn1pn]
    2阶(k)切线与3点(k+1)相关:
    f ′ ′ ( 0 ) = n ( n − 1 ) [ p 2 − 2 p 1 + p 0 ] f^{''}(0)=n(n-1)[p_2-2p_1+p_0] f(0)=n(n1)[p22p1+p0]
    f ′ ′ ( 1 ) = n ( n − 1 ) [ p n − 2 p n − 1 + p n − 2 ] f^{''}(1)=n(n-1)[p_n-2p_{n-1}+p_{n-2}] f(1)=n(n1)[pn2pn1+pn2]

    6、升阶

    • ( 1 − t ) B i n ( t ) = ( 1 − i n + 1 ) B i n + 1 ( t ) (1-t)B^{n}_i(t)=(1-\frac{i}{n+1})B^{n+1}_i(t) (1t)Bin(t)=(1n+1i)Bin+1(t)
    • t B i n ( t ) = i + 1 n + 1 B i n + 1 ( t ) tB^{n}_i(t)=\frac{i+1}{n+1}B^{n+1}_i(t) tBin(t)=n+1i+1Bin+1(t)

六、Bezier曲线的de Casteljau算法

在这里插入图片描述
在这里插入图片描述

  • 计算Bezier曲线 x ( t ) x(t) x(t)上参数为t的点
  • 良好的几何意义:该点将曲线一分两条子Bezier曲线,其控制顶点是中间生成的点
  • 可用于Bezier曲线的离散及求根等许多应用

七、几何样条曲线

1、用分段Bezier曲线来插值型值点

  • 分段Bezier曲线来插值型值点
    • 给定型值点: k 0 , ⋯   , k n ∈ R 3 k_0,\cdots,k_n \in R^3 k0,,knR3
    • 每两点间生成一段Bezier曲线,使得整体曲线满足一定的连续性 ( C 0 , C 1 , C 2 ) (C^0,C^1,C^2) (C0,C1,C2)

八、参考和引用

[1] bilibili:GAMES102:几何建模与处理
[2] Bezier曲线.pdf

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值