Typesetting math: 3%

几何建模与处理之五 Bezier曲线与B样条曲线

几何建模与处理之五 Bezier曲线与B样条曲线

Bezier曲线

建模的两种形式:

  1. 重建(Reconstruction)
    • 逆向工程:形状已有,要将其“猜”出来
    • 采样->拟合:需要函数空间足够丰富(表达能力够)
    • 代数观点:{a,b,c}作为基函数的组合权系数
  2. 设计(Design)
    • 自由设计:凭空产生,或从一个简单的形状编辑得到
    • 交互式编辑:几何直观性要好
    • 几何观点:基函数{t2,t,1}作为控制点的组合权系数

二次多项式曲线(抛物线):

f(y)=at2+bt+cf(y)=at2+bt+c

使用幂基表示曲线

f(t)=(x(t)t(t))=(11)t2+(20)t+(10)

使用Bernstein基函数表达

f(t)=(x(t)t(t))=(10)(1t)2+(00)2t(t1)+(01)t2

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

Bernstein基函数

n次Bernstein基函数:B=(B(n)0,B(n)1,...,B(n)n)

B(n)i=(ni)ti(1t)ni=B(degree)ithbasisfunction(ni)={n!(ni)!i!for0in0otherwise

性质

  • 对称性:Bni(t)=Bnn1(1t)

  • B(n)it=in达到最大值

用Bernstein基函数所表达的曲线具有非常好的几何意义

f(t)=ni=1bi(t)pi

Bezier曲线

n次Berzier曲线:n+1个控制点

x(t)=ni=0Bni(t)·bi

image-20210719151954280

Berzier曲线的性质来源于Bernstein基函数的性质。

Bernstein基函数与Bezier曲线的性质

  • 正权性:正性+权性

    • B(n)i(t)0,t[0,1]
    • ni=1B(n)i(t)=1,t[0,1]
  • 基性:B是次数不高于n的多项式集合(空间)的一组基

  • 递推公式:

    • 基函数的递推公式:B(n)i(t)=(1t)B(n1)i(t)+tB(n1)i1(t)B00(t)=1,B(n)i(t)=0fori0...n
    • 高阶的基函数由两个低阶的基函数“升阶”得到,利于保持一些良好的性质
  • 端点插值性:Bezier曲线经过首位两个控制顶点

  • 导数:

    • f(t)=nn1i=0Bn1i(t)(pi+1pi)
    • f[r](t)=n!(nr)!nri=0Bnri(t)·Δrpi

    Bezier曲线的端点性质

    • 端点插值:
    • 端点的切线方向与边相同
    • 端点的2阶(k)切线与3点(k+1)相关
  • 升阶:(1t)Bni(t)=(1in+1)Bn+1i(t) => tBni(t)=i+1n+1Bn+1i(t)

    Bezier曲线升阶:$$f(t)=\sum_{i=0}{n+1}B_i(t)[\frac {n+1-i}{n+1}P_i+\frac{i}{n+1}P_{i-1}]$$

De casteljau algorithm

根据基函数的递推公式:B(n)i(t)=(1t)B(n1)i(t)+tB(n1)i1(t)

给定一个t,就能求出x(t):b(r)i=(1n)br1i+tb(r1)i+1

image-20210719161102047

几何样条曲线

两Bezier曲线的拼接条件:

C0:

G1:三点共线

C1:三点共线且等长

C2d2/dt2(p22p1+p0),(pn2pn1+pn2),阴影三角形相似

构造3次插值Bezier曲线的几何方法

工程中,在点pi(0<i<n)处,作pi-1和pi+1连线的平行线,取1/6的位置作为控制点。一段曲线由四个点约束。

B样条

Bezier曲线(Bernstein基函数)存在全局性,不利于设计。

B样条曲线:分段Bezier曲线,具有局部性

样条曲线的统一表达

基函数

均匀结点(Uniform)

N1i={1,iti+10,otherwiseNki=ti(i+k1)iNk1i(t)+(i+k)t(i+k)(i+1)Nk1i+1(t)=tik1Nk1i(t)+i+ktk1Nk1i+1(t)

非均匀结点(t0<t1<....<tn<...tn+k

Ni,1={1,titti+10,otherwiseNi,k=ttiti+k1tiNi,k1(t)+ti+ktti+kti+1Ni+1,k1(t)fork>1i=0...n

image-20210719172642187 image-20210719172654080 image-20210719172705319

性质:

  • Ni,k(t)>0 for ti<t<ti+k(局部性)
  • ni=0Ni,k(t)=1 for tk1ttn+1 (权性)
  • Ni,k(t)tj处是Ck-2

B-spline curve

给定n+1个控制点,d0,...dnR3T=(t0,...tn+k)称为向量节点。

x(t)=ni=0Ni,k(t)·di

每多出一个重结点(Multiple knots),曲线的光滑性降一阶。

例如,k=4,n=5的B-spline curve

k重时(0,...,0,1,...,1)为Bernstein基。

The de Boor algorithm

posted @   YIMG  阅读(957)  评论(0编辑  收藏  举报
编辑推荐:
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
阅读排行:
· 为DeepSeek添加本地知识库
· 精选4款基于.NET开源、功能强大的通讯调试工具
· DeepSeek智能编程
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
点击右上角即可分享
微信分享提示