• 均匀B样条曲线的表达式


    1 矩阵表达

    对于均匀B样条曲线,其曲线方程的矩阵表达为:
    c ( t ) = [ 1   t   ⋯   t k ] M k [ P i − k P i − k + 1 ⋮ P i ]   t ∈ [ 0 , 1 ] (1) c(t) = [1\ t\ \cdots\ t^k] M_k

    [PikPik+1Pi]" role="presentation" style="position: relative;">[PikPik+1Pi]
    \ t\in[0,1] \tag{1} c(t)=[1 t  tk]Mk PikPik+1Pi  t[0,1](1)
    其中 t t t为参数, P i − k , P i − k + 1 , ⋯   , P i P_{i-k},P_{i-k+1},\cdots,P_i Pik,Pik+1,,Pi k + 1 k+1 k+1个控制点,而 M k M_k Mk由下式给出:
    M k = [ m 0 , 0 m 0 , 1 ⋯ m 0 , k ⋮ ⋮ ⋯ ⋮ m k , 0 m k , 1 ⋯ m k , k ] (2) M_k =
    [m0,0m0,1m0,kmk,0mk,1mk,k]" role="presentation" style="position: relative;">[m0,0m0,1m0,kmk,0mk,1mk,k]
    \tag{2}
    Mk= m0,0mk,0m0,1mk,1m0,kmk,k (2)

    而矩阵 M k M_k Mk中的每个元素 m i , j m_{i,j} mi,j可以由下式直接给出,
    m i , j = 1 ( k − 1 ) ! C k k − i ∑ s = j k ( − 1 ) s − j C k + 1 s − j ( k − s ) k − i (3) m_{i,j} = \frac{1}{(k-1)!} C_{k}^{k-i} \sum_{s=j}^{k}(-1)^{s-j}C_{k+1}^{s-j}(k-s)^{k-i} \tag{3} mi,j=(k1)!1Ckkis=jk(1)sjCk+1sj(ks)ki(3)
    由上式,很容易得出,
    M 1 = [ 1 0 − 1 1 ] M_1 =
    [1011]" role="presentation" style="position: relative;">[1011]
    M1=[1101]

    M 2 = [ 1 1 0 − 2 2 0 1 − 2 1 ] M_2=
    [110220121]" role="presentation" style="position: relative;">[110220121]
    M2= 121122001

    M 3 = 1 2 ⋅ [ 1 4 1 0 − 3 0 3 0 3 − 6 3 0 − 1 3 − 3 1 ] M_3 = \frac{1}{2} \cdot
    [1410303036301331]" role="presentation" style="position: relative;">[1410303036301331]
    M3=21 1331406313330001

    M 4 = 1 6 ⋅ [ 1 11 11 1 0 − 4 − 12 12 4 0 6 − 6 − 6 6 0 − 4 12 − 12 4 0 1 − 4 6 − 4 1 ] M_4 = \frac{1}{6} \cdot
    [1111110412124066660412124014641]" role="presentation" style="position: relative;">[1111110412124066660412124014641]
    M4=61 1464111126124111261261464400001

    计算矩阵 M k M_k Mk的matlab程序为,

    clear all
    clc
    close all
    
    
    %%
    k = input('请输入一个大于等于1的整数:');
    M = zeros(k+1,k+1);
    for i = 0 : k
        for j = 0 : k
            a = 1 / factorial(k - 1);
            a = a * nchoosek(k, k - i);
            b = 0;
            for s = j : k
                b = b + (-1)^(s - j) * nchoosek(k + 1, s - j) * (k - s)^(k - i);
            end
            a = a * b;
            M(i+1, j+1) = a;
        end
    end
    M %小数表示
    format rat
    M %分数表示
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    2 多项式表达

    对于均匀B样条曲线,其曲线多项式表示为:
    c ( t ) = w 0 P i − k + w 1 P i − k + 1 + ⋯ + w k P i (4) c(t) = w_0 P_{i-k} +w_1P_{i-k+1}+\cdots + w_kP_i \tag{4} c(t)=w0Pik+w1Pik+1++wkPi(4)
    其中 t t t为参数, P i − k , P i − k + 1 , ⋯   , P i P_{i-k},P_{i-k+1},\cdots,P_i Pik,Pik+1,,Pi k + 1 k+1 k+1个控制点,而 w 0 , w 1 , ⋯   , w k w_0,w_1,\cdots,w_k w0,w1,,wk t t t的多项式,可以理解为控制点的权重,由下式给出,
    w i = 1 ( k − 1 ) ! ∑ j = 0 k − i ( − 1 ) j C k + 1 j ( t + k − i − j ) k    i = 0 , 1 , ⋯   , k (5) w_i = \frac{1}{(k-1)!} \sum_{j=0}^{k-i}(-1)^jC_{k+1}^j(t+k-i-j)^{k} \ \ i=0,1,\cdots,k \tag{5} wi=(k1)!1j=0ki(1)jCk+1j(t+kij)k  i=0,1,,k(5)
    k k k取4时,有5个控制点,每个控制点的权重分别为,
    w 0 = 1 6 ⋅ ∑ j = 0 4 ( − 1 ) j ⋅ C 5 j ⋅ ( t + 4 − j ) 4 w_0=\frac{1}{6}\cdot \sum_{j=0}^4(-1)^j\cdot C_5^j \cdot (t+4-j)^4 w0=61j=04(1)jC5j(t+4j)4
    w 1 = 1 6 ⋅ ∑ j = 0 3 ( − 1 ) j ⋅ C 5 j ⋅ ( t + 3 − j ) 4 w_1 = \frac{1}{6}\cdot\sum_{j=0}^3(-1)^j\cdot C_5^j \cdot (t + 3 - j)^4 w1=61j=03(1)jC5j(t+3j)4
    w 2 = 1 6 ⋅ ∑ j = 0 2 ( − 1 ) j ⋅ C 5 j ⋅ ( t + 2 − j ) 4 w_2 = \frac{1}{6}\cdot \sum_{j=0}^2(-1)^j\cdot C_5^j \cdot (t + 2 - j)^4 w2=61j=02(1)jC5j(t+2j)4
    w 3 = 1 6 ⋅ ∑ j = 0 1 ( − 1 ) j ⋅ C 5 j ⋅ ( t + 1 − j ) 4 w_3 = \frac{1}{6}\cdot\sum_{j=0}^1(-1)^j\cdot C_5^j \cdot (t + 1 - j)^4 w3=61j=01(1)jC5j(t+1j)4
    w 4 = 1 6 ⋅ ∑ j = 0 0 ( − 1 ) j ⋅ C 5 j ⋅ ( t − j ) 4 = t 4 w_4 = \frac{1}{6}\cdot\sum_{j=0}^0(-1)^j\cdot C_5^j \cdot (t - j)^4=t^4 w4=61j=00(1)jC5j(tj)4=t4
    w 0 , w 1 , w 2 , w 3 , w 4 w_0,w_1,w_2,w_3,w_4 w0,w1,w2,w3,w4展开,合并同类多项式,可得,
    w 0 = 1 6 ⋅ ( t 4 − 4 t 3 + 6 t 2 − 4 t + 1 ) = 1 6 ⋅ [ 1   t   t 2   t 3   t 4 ] [ 1 − 4 6 − 4 1 ] w_0 = \frac{1}{6}\cdot (t^4 - 4t^3 + 6t^2 - 4t + 1)=\frac{1}{6} \cdot[1\ t \ t^2 \ t^3 \ t^4]

    [14641]" role="presentation" style="position: relative;">[14641]
    w0=61(t44t3+6t24t+1)=61[1 t t2 t3 t4] 14641
    w 1 = 1 6 ⋅ ( − 4 t 4 + 12 t 3 − 6 t 2 − 12 t + 11 ) = 1 6 ⋅ [ 1   t   t 2   t 3   t 4 ] [ 11 − 12 − 6 12 − 4 ] w_1=\frac{1}{6} \cdot (- 4t^4 + 12t^3 - 6t^2 - 12t + 11) = \frac{1}{6} \cdot[1\ t \ t^2 \ t^3 \ t^4]
    [11126124]" role="presentation" style="position: relative;">[11126124]
    w1=61(4t4+12t36t212t+11)=61[1 t t2 t3 t4] 11126124

    w 2 = 1 6 ⋅ ( 6 t 4 − 12 t 3 − 6 t 2 + 12 t + 11 ) = 1 6 ⋅ [ 1   t   t 2   t 3   t 4 ] [ 11 12 − 6 − 12 6 ] w_2=\frac{1}{6} \cdot (6t^4 - 12t^3 - 6t^2 + 12t + 11) = \frac{1}{6} \cdot[1\ t \ t^2 \ t^3 \ t^4]
    [11126126]" role="presentation" style="position: relative;">[11126126]
    w2=61(6t412t36t2+12t+11)=61[1 t t2 t3 t4] 11126126

    w 3 = 1 6 ⋅ ( − 4 t 4 + 4 t 3 + 6 t 2 + 4 t + 1 ) = 1 6 ⋅ [ 1   t   t 2   t 3   t 4 ] [ 1 4 6 4 − 4 ] w_3=\frac{1}{6} \cdot (- 4t^4 + 4t^3 + 6t^2 + 4t + 1) = \frac{1}{6} \cdot[1\ t \ t^2 \ t^3 \ t^4]
    [14644]" role="presentation" style="position: relative;">[14644]
    w3=61(4t4+4t3+6t2+4t+1)=61[1 t t2 t3 t4] 14644

    w 4 = 1 6 ⋅ t 4 = 1 6 ⋅ [ 1   t   t 2   t 3   t 4 ] [ 0 0 0 0 1 ] w_4=\frac{1}{6} \cdot t^4=\frac{1}{6} \cdot[1\ t \ t^2 \ t^3 \ t^4]
    [00001]" role="presentation" style="position: relative;">[00001]
    w4=61t4=61[1 t t2 t3 t4] 00001

    将上述 w 0 , w 1 , w 2 , w 3 , w 4 w_0,w_1,w_2,w_3,w_4 w0,w1,w2,w3,w4代入公式(4),整理可得B样条曲线的表达式为,
    c ( t ) = [ 1   t   t 2   t 3   t 4 ] ⋅ 1 6 ⋅ [ 1 11 11 1 0 − 4 − 12 12 4 0 6 − 6 − 6 6 0 − 4 12 − 12 4 0 1 − 4 6 − 4 1 ] ⋅ [ P i − k P i − k + 1 ⋮ P i ] c(t) = [1\ t\ t^2\ t^3\ t^4]\cdot \frac{1}{6}\cdot
    [1111110412124066660412124014641]" role="presentation" style="position: relative;">[1111110412124066660412124014641]
    \cdot
    [PikPik+1Pi]" role="presentation" style="position: relative;">[PikPik+1Pi]
    c(t)=[1 t t2 t3 t4]61 1464111126124111261261464400001 PikPik+1Pi

    该表达式与第1节矩阵表达中公式(1)取 k = 4 k=4 k=4时一致。

    3 参考文献

    [1] http://t.csdn.cn/WJQkU

  • 相关阅读:
    玩转亚马逊 AWS IoT(3): SpringBoot 2.7 集成 AWS IoT 服务
    IP和MAC的作用区别
    【雷达成像】雷达SAR成像仿真的应用(Matlab代码实现)
    C++ 引用的数组和数组的引用
    RecyclerView嵌套布局,导致RecyclerView复用失效 解决
    HDL-Bits 刷题记录 04
    利用互斥锁解决缓存击穿问题
    模拟退火补完计划
    MapGIS 10.6 Pro新品发布!加速地理信息领域核心技术国产替代
    Linux-提高CPU、内存使用率shell脚本
  • 原文地址:https://blog.csdn.net/YMWM_/article/details/126903485