zoukankan      html  css  js  c++  java
  • 几何建模与处理之五 Bezier曲线与B样条曲线

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

    Bezier曲线

    建模的两种形式:

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

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

    [f(y)=at^2+bt+c\ ]

    使用幂基表示曲线

    [f(t)= egin {pmatrix} x(t)\t(t) end {pmatrix}= egin {pmatrix} 1\1 end {pmatrix}t^2+ egin {pmatrix} -2\0 end {pmatrix}t+ egin {pmatrix} 1\0 end {pmatrix} ]

    使用Bernstein基函数表达

    [f(t)= egin {pmatrix} x(t)\t(t) end {pmatrix}= egin {pmatrix} 1\0 end {pmatrix}(1-t)^2+ egin {pmatrix} 0\0 end {pmatrix}2t(t-1)+ egin {pmatrix} 0\1 end {pmatrix}t^2 ]

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

    Bernstein基函数

    n次Bernstein基函数:(B=({B_0^{(n)}, B_1^{(n)},...,B_n^{(n)}}))

    [B_i^{(n)}=egin {pmatrix} n\i end {pmatrix}t^i(1-t)^{n-i}=B_{i-th basis function}^{(degree)}\ egin {pmatrix} n\i end {pmatrix}= egin {cases} frac {n!}{(n-i)!i!} &for 0 le i le n \ 0 & otherwise end {cases} ]

    性质

    • 对称性:(B_i^n(t)=B_{n-1}^n(1-t))

    • (B_i^{(n)})(t=frac{i}{n})达到最大值

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

    [f(t)=sum_{i=1}^n b_i(t)p_i ]

    Bezier曲线

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

    [x(t)=sum_{i=0}^n B_i^n(t)·b_i ]

    image-20210719151954280

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

    Bernstein基函数与Bezier曲线的性质

    • 正权性:正性+权性

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

    • 递推公式:

      • 基函数的递推公式:(B_i^{(n)}(t)=(1-t)B_i^{(n-1)}(t)+tB_{i-1}^{(n-1)}(t) quad B_0^0(t)=1,B_i^{(n)}(t)=0quad forquad i otin{0...n})
      • 高阶的基函数由两个低阶的基函数“升阶”得到,利于保持一些良好的性质
    • 端点插值性:Bezier曲线经过首位两个控制顶点

    • 导数:

      • (f'(t)=nsum_{i=0}^{n-1}B_i^{n-1}(t)(p_{i+1}-p_i))
      • (f^{[r]}(t)=frac{n!}{(n-r)!}sum_{i=0}^{n-r}B_i^{n-r}(t)· Delta ^rp_i)

      Bezier曲线的端点性质

      • 端点插值:
      • 端点的切线方向与边相同
      • 端点的2阶(k)切线与3点(k+1)相关
    • 升阶:((1-t)B_i^n(t)=(1-frac{i}{n+1})B_i^{n+1}(t)) => (tB_i^n(t)=frac{i+1}{n+1}B_i^{n+1}(t))

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

    De casteljau algorithm

    根据基函数的递推公式:(B_i^{(n)}(t)=(1-t)B_i^{(n-1)}(t)+tB_{i-1}^{(n-1)}(t))

    给定一个t,就能求出x(t):(b_i^{(r)}=(1-n)b_i^{r-1}+tb_{i+1}^{(r-1)})

    image-20210719161102047

    几何样条曲线

    两Bezier曲线的拼接条件:

    C0:

    G1:三点共线

    C1:三点共线且等长

    C2(d^2/dt^2)((p_2-2p_1+p_0),(p_n-2p_{n-1}+p_{n-2})),阴影三角形相似

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

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

    B样条

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

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

    样条曲线的统一表达

    基函数

    均匀结点(Uniform)

    [N_i^1=egin{cases}1,&ile t le i+1 \0,&otherwiseend{cases}\ N_i^k=frac{t-i}{(i+k-1)-i}N_i^{k-1}(t)+frac{(i+k)-t}{(i+k)-(i+1)}N_{i+1}^{k-1}(t)\ =frac{t-i}{k-1}N_i^{k-1}(t)+frac{i+k-t}{k-1}N_{i+1}^{k-1}(t) ]

    非均匀结点((t_0<t_1<....<t_n<...t_{n+k})

    [N_{i,1}=egin{cases}1,&t_ile t le t_{i+1} \0,&otherwiseend{cases}\ N_{i,k}=frac{t-t_i}{t_{i+k-1}-t_i}N_{i,k-1}(t)+frac{t_{i+k}-t}{t_{i+k}-t_{i+1}}N_{{i+1},{k-1}}(t)\ for quad k > 1quad i=0...n ]

    image-20210719172642187 image-20210719172654080 image-20210719172705319

    性质:

    • (N_{i,k}(t)>0) for (t_i<t<t_{i+k})(局部性)
    • (sum_{i=0}^nN_{i,k}(t)=1) for (t_{k-1}le t le t_{n+1}) (权性)
    • (N_{i,k}(t))(t_j)处是Ck-2

    B-spline curve

    给定n+1个控制点,(d_0,...d_nin R^3)(T=(t_0,...t_{n+k}))称为向量节点。

    [x(t)=sum_{i=0}^nN_{i,k}(t)·d_i ]

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

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

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

    The de Boor algorithm

    作者:YIMG
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    Activiti 教程
    head插件对elasticsearch 索引文档的增删改查
    ElasticSearch的基本用法与集群搭建
    kibana查询语法
    Elasticsearch: 权威指南(官方教程)
    ElasticSearch安装及简单配置说明
    在Linux上安装Elasticsearch5.x
    在Windows上安装Elasticsearch 5.x
    SVN提交出错--URL access forbidden for unknown reason
    Elasticsearch配置详解、文档元数据
  • 原文地址:https://www.cnblogs.com/YIMG/p/15251932.html
Copyright © 2011-2022 走看看