Bezier曲线反求控制点

Bezier曲线反求控制点

做曲线拟合的时候,往往希望拟合的曲线通过数据点,这个推导一下Bezier曲线控制点的计算过程.

曲线公式

曲 线 : C ( u ) = ∑ i = 0 n B n , i ( u ) P i 基 函 数 : B n , i = n ! i ! ( n − i ) ! u i ( 1 − u ) n − i 曲线:C(u) = \sum^n_{i=0}B_{n,i}(u)P_i\\ 基函数:B_{n,i}=\frac{n!}{i!(n-i)!}u^i(1-u)^{n-i} 线C(u)=i=0nBn,i(u)PiBn,i=i!(ni)!n!ui(1u)ni

这里求解控制点,即C为已知信息,求解式中的P.

计算3次Bezier曲线控制点

曲线多项式:

C ( u ) = ∑ i = 0 3 B 3 , i ( u ) P i = ( 1 − u ) 3 P 0 + 3 ( 1 − u ) 2 u P 1 + 3 ( 1 − u ) u 2 P 2 + u 3 P 3 , 0 ≤ u ≤ 1 C(u) = \sum^3_{i=0}B_{3,i}(u)P_i=(1-u)^3P_0+3(1-u)^2uP_1+3(1-u)u^2P_2+u^3P_3,\quad 0\le u \le 1 C(u)=i=03B3,i(u)Pi=(1u)3P0+3(1u)2uP1+3(1u)u2P2+u3P3,0u1

写成矩阵方式:

C = B ∗ P C=B*P C=BP
式中:

B = [ 1 0 0 0 8 27 4 9 2 9 1 27 1 27 2 9 4 9 8 27 0 0 0 1 ] C = [ P 0 P 1 P 2 P 3 ] B = \left[ \begin{matrix} 1 & 0 & 0 & 0\\ \frac{8}{27} & \frac{4}{9} & \frac{2}{9} & \frac{1}{27}\\ \frac{1}{27} & \frac{2}{9} & \frac{4}{9} & \frac{8}{27}\\ 0 & 0 & 0 & 1\\ \end{matrix} \right]\\ C = \left[ \begin{matrix} P_0\\ P_1\\ P_2\\ P_3\\ \end{matrix} \right] B=1278271009492009294002712781C=P0P1P2P3
 
则 得到;
B − 1 C = B − 1 B ∗ P P = B − 1 C B^{-1}C=B^{-1}B*P\\ P = B^{-1}C B1C=B1BPP=B1C
即可计算得到相应的样条曲线控制点.

Python验证

取点位 C0(0,0) C1(0,2) C2(2,2) C3(2,0)

计算控制点P后,画出如下Bezier曲线:
在这里插入图片描述

黑色点为原始数据点;
红色点为计算得到的控制点;
蓝色曲线为由原始数据点直接拟合的Bezier曲线;
橘黄色为由控制点拟合的Bezier曲线;
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值