matlab 已知一系列的点,怎样用bezier曲线去拟合,并反求控制点
答案:2 悬赏:10 手机版
解决时间 2021-03-09 10:41
- 提问者网友:姑娘长的好罪过
- 2021-03-09 07:54
matlab 已知一系列的点,怎样用bezier曲线去拟合,并反求控制点
最佳答案
- 五星知识达人网友:長槍戰八方
- 2021-03-09 08:11
matlab 已知一系列的点,怎样用bezier曲线去拟合,并反求控制点
在编程之前要清楚曲线拟合的法方程组方程,然后就很容易用matlab实现了
新建个m文件curvefitting.m
function=curvefitting(x,y)
format short;
A=zeros(2,2);
for i=0:1
for j=0:1
A(i+1,j+1)=sum(sin(x).^(i+j));
end
b(i+1)=sum(sin(x).^i.*y);
end
c=A\b';
p=fliplr(c');
然后把x,y的向量分别代入即可求得参数a,b
在编程之前要清楚曲线拟合的法方程组方程,然后就很容易用matlab实现了
新建个m文件curvefitting.m
function=curvefitting(x,y)
format short;
A=zeros(2,2);
for i=0:1
for j=0:1
A(i+1,j+1)=sum(sin(x).^(i+j));
end
b(i+1)=sum(sin(x).^i.*y);
end
c=A\b';
p=fliplr(c');
然后把x,y的向量分别代入即可求得参数a,b
全部回答
- 1楼网友:醉吻情书
- 2021-03-09 09:09
最简单的多项式拟合
p = polyfit(x,y,n) finds the coefficients of a polynomial p(x) of degree n that fits the data y best in a least-squares sense. p is a row vector of length n+1 containing the polynomial coefficients in descending powers, p(1)*x^n + p(2)*x^(n-1) +...+ p(n)*x + p(n+1).
三次样条插值
pp = spline(x,y) returns the piecewise polynomial form of the cubic spline interpolant for later use with ppval and the spline utility unmkpp. x must be a vector. y can be a scalar, a vector, or an array of any dimension. if y is an array that is not a vector, the size of y must have the form [d1,d2,...,dk,n], where n is the length of x. the interpolation is performed for each d1-by-d2-by-...-dk value in y.
yy = spline(x,y,xx) is the same as yy = ppval(spline(x,y),xx), thus providing, in yy, the values of the interpolant at xx. xx can be a scalar, a vector, or a multidimensional array.
bezier曲线
function [x,y]=bezier(x,y)
%用法:
%bezier(x,y)
% 生成n-1次贝塞尔曲线,其中x和y是n个点的坐标
%h=bezier(x,y)
% 生成n-1次贝塞尔曲线并返回曲线句柄
%[x,y]=bezier(x,y)
% 返回n-1次贝塞尔曲线的坐标
%例子:
%bezier([5,6,10,12],[0 5 -5 -2])
n=length(x);
t=linspace(0,1);
xx=0;yy=0;
for k=0:n-1
tmp=nchoosek(n-1,k)*t.^k.*(1-t).^(n-1-k);
xx=xx+tmp*x(k+1);
yy=yy+tmp*y(k+1);
end
if nargout==2
x=xx;y=yy;
end
h=plot(xx,yy);
if nargout==1
x=h;
end
end
matlab提供了很多插值,拟合的函数,可在帮助里查一下,还有例子程序。
比如说polyfit
可用 doc polyfit 来查找,找到后还有很多相关的函数,一个个找下去,能找到你需要的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯