0. 引言
有时候对于三次、五次实时插值并不满足我们的控制需求,而贝塞尔曲线插值越来越受到关注。
0.1 最终效果
下图是一个七次插值的贝塞尔曲线形状
1. 贝塞尔插值
对于一维M
次贝塞尔曲线的公式为:
b
(
s
)
=
∑
k
=
0
M
α
k
M
!
k
!
(
M
−
k
)
!
s
k
(
1
−
s
)
M
−
k
b(s) = \sum\limits_{k = 0}^M {{\alpha _k}} \frac{{M!}}{{k!(M - k)!}}{s^k}{(1 - s)^{M - k}}
b(s)=k=0∑Mαkk!(M−k)!M!sk(1−s)M−k
例如,对于
M
=
5
M=5
M=5的贝塞尔曲线,
α
\alpha
α与
s
s
s的关系如下图:
通过这个例子,你就可以理解贝塞尔的变量关系,从而设置满足自己要求的曲线参数。
其他贝塞尔曲线性质可以这样描述:
更多动态展示你可以查看这里的视频;
1.1 Matlab代码实现
function [res] = bezierPolynomials(s,alpha)
% s在[0,1]之间 alpha决定着曲线的形状
M = size(alpha,2)-1;% 只需要设定alpha的大小M就确定了
M_factorial = factorial(M);
res = 0;
for k = 0:1:M
res = res + M_factorial/(factorial(k)*factorial(M-k))*alpha(k+1)*s^k*(1-s)^(M-k);
end
end
1.2 测试代码
clear
clc
alp = [0.1 0.3 0.2 0.5 0.1 0.1]*10;
s = [0:0.01:1];
dat = [];
for i = 1:size(s,2)
dat = [dat;bezierPolynomials(s(i),alp)];
end
plot(dat);
效果就是上图所示,可以通过参数优化设计属于自己的曲线类型。