贝塞尔曲线

贝塞尔曲线

以3阶贝塞尔曲线为例:
3阶贝塞尔曲线点图
P(0,2)划过的轨迹即为贝塞尔曲线轨迹,满足以下比例关系:
P 0 P 0 1 P 0 1 P 1 = P 1 2 P 2 P 1 P 1 2 = P 0 1 P 0 2 P 0 2 P 1 2 \frac{P_0P^1_0}{P^1_0P1}=\frac{P^2_1P2}{P1P^2_1}=\frac{P^1_0P^2_0}{P^2_0P^2_1} P01P1P0P01=P1P12P12P2=P02P12P01P02
使用线性方程展开表达式可得:
P 0 1 = ( 1 − t ) P 0 + t P 1 ( 1 ) P 1 2 = ( 1 − t ) P 1 + t P 2 ( 2 ) P 0 2 = ( 1 − t ) P 0 1 + t P 1 2 ( 3 ) P^1_0=(1-t)P_0+tP_1 \quad (1) \\ P^2_1=(1-t)P_1+tP2 \quad (2) \\ P^2_0=(1-t)P^1_0+tP^2_1 \quad (3) P01=(1t)P0+tP1(1)P12=(1t)P1+tP2(2)P02=(1t)P01+tP12(3)
(1)(2)代入(3)得:
P 0 2 = ( 1 − t ) 2 P 0 + 2 t ( 1 − t ) P 1 + t 2 P 2 P^2_0=(1-t)^2P_0+2t(1-t)P_1+t^2P_2 P02=(1t)2P0+2t(1t)P1+t2P2

贝塞尔曲线表达式

n阶贝塞尔曲线表达式满足二项式展开定理:
B ( t ) = ∑ i = 0 n C i n ( 1 − t ) n − i t i p i , t ∈ [ 0 , 1 ] ( 1 ) C i n = n ! ( n − i ) ! i ! ( 2 ) B(t)=\sum^n_{i=0}C^n_i(1-t)^{n-i}t^ip_i, t \in [0,1] \quad (1) \\ C^n_i=\frac{n!}{(n-i)!i!} \quad (2) B(t)=i=0nCin(1t)nitipi,t[0,1](1)Cin=(ni)!i!n!(2)
将(2)带入(1)式:
B ( t ) = ∑ i = 0 n n ! ( n − i ) ! i ! ( 1 − t ) n − i t i p i , t ∈ [ 0 , 1 ] B(t)=\sum^n_{i=0}\frac{n!}{(n-i)!i!}(1-t)^{n-i}t^ip_i, t \in [0,1] B(t)=i=0n(ni)!i!n!(1t)nitipi,t[0,1]

python实现n阶贝塞尔曲线

def beizer(points, t):
    """
    points: list of points
    t: t value
    """
    b,n = np.zeros((2)), len(points)-1
    for i,p in enumerate(points):
        b += (1-t)**(n-i) * t**i * p * (math.factorial(n)/(math.factorial(i)*math.factorial(n-i)))
    return b
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值