Re:求教:如何利用离散点进行插值,生成闭合曲线?
就像下面的这个图形,如何用插值生成?Re:求教:如何利用离散点进行插值,生成闭合曲线?
当然,点的坐标可以自己设定,只要生成类似图形就可以,最好是连续光滑(二阶连续可导),我觉得插值用b样条可以,spline呢?关键是三维的三次样条不好做。大家帮忙看看!谢谢!Re:求教:如何利用离散点进行插值,生成闭合曲线?
求救啊!Re:求教:如何利用离散点进行插值,生成闭合曲线?
有什麽思路可以告诉我,不一定要完全做出来。谢谢!Re:求教:如何利用离散点进行插值,生成闭合曲线?
你的这个问题我想很久,以前别人也问过我,感觉用样条也未必能做出来,因为样条的多变量拟合也是拟合为曲面的(不知道理解的对否:I)前两天试图用streamline做一下,该命令是做流线的,但试了一下矩阵的维数老搞不对,急切之间没能仔细研究帮助,既然你这么急,我也没算出来,但提供这个思路,未必有启发,抱歉...另外刚刚想到,如果用样条拟合,因为可以用fnval求值,所以能否先拟合为曲面,寻找你要的一系列点,让其余点赋值为NaN,画曲线?
这个虽然笨点儿,估计可行...
Re:求教:如何利用离散点进行插值,生成闭合曲线?
谢谢Simwe,我觉得有个主要的问题是曲线必须过这些已知点,所以恐怕拟和不能完成,我觉得应该用插值,这个样条曲线插值问题用什麽样的样条曲线是个问题,B样条可以给出非常光滑的样条曲线,但是不知道如何实现三维的,其他的样条曲线,比如有理样条,三次样条,也都是二维的,不知道哪位高人能帮我想想如何实现!谢谢!!Re:求教:如何利用离散点进行插值,生成闭合曲线?
另外,我做了一个东西,但不是很满意,因为X不可以重复,而且插值方法只能用interp1,不是我想要的function model()
xi = ;
yi = ;
zi = ;
plot_3D(xi,yi,zi)
hold on
xlabel('x')
ylabel('y')
zlabel('z')
grid on
function fun = plot_3D(xi,yi,zi) n = 2000;
x = linspace(min(xi),max(xi),n);
y =interp1(xi,yi,x,'spline');
z =interp1(xi,zi,x,'spline');
plot3(x,y,z)
形成的图形如图
Re:求教:如何利用离散点进行插值,生成闭合曲线?
是我理解偏差还是你没搞清楚三次样条的命令意思,帮助中三次样条直接就给了一个三维曲面的拟合例子:x =.0001+[-4:.2:4];
y = -3:.2:3;
= meshgrid(y,x);
r = pi*sqrt(xx.^2+yy.^2);
z = sin(r)./r;
bcs = csapi( {x,y}, z );
fnplt( bcs )
axis([-5 5 -5 5 -.5 1])
另外关于函数逼近根据我学习的经验,如果没理解错的话,所有你给出的已知样本点都是必须经过的,不知道你从哪里得到的信息曲线能不经过你给的已知点,可以给个例子吗?确实说明一下样条拟合曲线不经过已知且初始代入的样本点,另外样条中提供了在原曲线(面)内插节点的命令:
brk2knt:按指定重数由一个插值点序列产生新节点序列
knt2brk:将节点序列转化为插值点序列,重复节点将被去掉
不过要说明的是好像自6.5.1版本开始,有关双变元的比如2元三次样条函数构造的命令随着张量积样条函数工具箱的取消而取消了,原因不祥,望了解者告知^_^,所以如果你用的是6.5.1后的版本估计你的问题需要你自己看函数逼近的内容然后自己编写M代码实现.因为我没有6.5,所以我从来没用过张量积样条工具箱,只是根据资料说明一下情况^_^如果出现错误还望见谅.
============================================================================
刚才没有看到你后面的例子,如果你都已经画到这个地步,能否通过unique命令消去重复节点,比如消去x中重复的值,再对y,z做相应的寻址,用这个没有重复的节点序列做plot3?关于消去重复节点的可以参考下这个:
http://www.simwe.com/forum/viewthread.php?tid=565129
未必能有帮助,但至少是个思路
Re:求教:如何利用离散点进行插值,生成闭合曲线?
我初学matlab,在一本教材上看见说是样条曲线插值与样条曲线拟和不同,拟和不要求样条曲线过全部的数据点。关于unique我再看看,以前没接触过
我相信总会有办法的,谢谢你的帮助,我有什麽进展或问题再向你请教。
你有什麽进展尽快告诉我,谢谢!^_^
Re:求教:如何利用离散点进行插值,生成闭合曲线?
是不是需要买matlab模块呢?Re:求教:如何利用离散点进行插值,生成闭合曲线?
坚持就是胜利!Re:求教:如何利用离散点进行插值,生成闭合曲线?
我想这个问题主要是修改各种样条插值函数的m文件,是吗?bzzz 老大:离散点进行插值,生成闭合曲线,你算法能出理下面的情况吗?
当一个角度上有多个半径长度不一的点时怎么插值? 如图中的曲线情况,如果给定点如何能得到正确得闭合曲线。请老大们费心帮忙考虑一下,有没有办法解决?
谢谢!
[ 本帖最后由 cawlfj 于 2006-8-23 10:08 编辑 ] matlab 7.1中不支持这个语句
index=(y-y0)<0;
我把它改了一下
index=lt(y-y0,0);
================================
错了,该语句是论坛改版后出现的一个小bug,是“<”的意思。
by bainhome
================================
[ 本帖最后由 bainhome 于 2006-10-15 11:28 编辑 ] 理解了
应该是index=(y-y0)<0;
与index=lt(y-y0,0);
等价 原帖由 baijie 于 2005-9-14 10:06 发表
小弟有个问题,以上的都是二维的,那如何实现三维的呢?
三维的就先用球坐标转换一下呗