查看: 6499|回复: 14|关注: 0

[已答复] 如何将三维离散点连接成光滑曲线?

[复制链接]

新手

10 麦片

财富积分


050


2

主题

11

帖子

0

最佳答案
发表于 2017-2-10 13:25:47 | 显示全部楼层 |阅读模式
我得到了一组空间离散点,共30个,需要将它们依次连接起来称为一条曲线,但是用plot3命令得到的轨迹太粗糙,点与点之间是线段连接的,请问如果要让曲线变得光滑需要怎么处理?
另,如果要用Bspline样条曲线来拟合这条轨迹又该如何处理呢?

谢谢!

原程序段:
a11=[-0.5 -1.5 -2.5 -2.5 -3 -3 -2.5 -2.5 -1.5 -0.5 -0.5 0 0.5 0.5 1.5 1.5 2 2 1.5 1 1 1.5 2 2 1.5 1.5 0.5 0.5 0 -0.5 -0.5];
b11=[0.866 0.866 0.866 0.866 0 0 -0.866 -0.866 -0.866 -0.866 -0.866 -1.732 -2.598 -2.598 -2.598 -2.598 -1.732 -1.732 -0.866 0 0 0.866 1.732 1.732 2.598 2.598 2.598 2.598 1.732 0.866 0.866];
c11=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30];

plot3(a11,b11,c11,'-bx');
hold on;

set(gca,'DataAspectRatio',[1 1 1]);

set(gca,'xticklabel',[-4,-3,-2,-1,0,1,2,3,4]);
set(gca,'yticklabel',[-4,-3,-2,-1,0,1,2,3,4]);
grid on;



plot3

plot3

新手

37 麦片

财富积分


050


3

主题

103

帖子

6

最佳答案
  • 关注者: 1
发表于 2017-2-10 13:35:28 | 显示全部楼层
试试看看插值扩展数据的个数是否可行,给你上一个课件,仅供参考

MATLAB教学视频:详解数据插值的MATLAB实现.pdf

775.81 KB, 下载次数: 384

新手

10 麦片

财富积分


050


2

主题

11

帖子

0

最佳答案
 楼主| 发表于 2017-2-11 02:32:12 | 显示全部楼层
来也匆匆 发表于 2017-2-10 13:35
试试看看插值扩展数据的个数是否可行,给你上一个课件,仅供参考

非常感谢提供资料。您的课件中是二维坐标插值,如果是三维坐标该如何处理呢?谢谢

论坛优秀回答者

中级

1347 麦片

财富积分


5001500


6

主题

5557

帖子

277

最佳答案
  • 关注者: 133
发表于 2017-2-11 07:02:48 来自手机 | 显示全部楼层
三维插值
来自: 微社区

新手

10 麦片

财富积分


050


2

主题

11

帖子

0

最佳答案
 楼主| 发表于 2017-2-13 16:05:14 | 显示全部楼层

您好,可以详细说一下吗?谢谢

新手

27 麦片

财富积分


050


3

主题

23

帖子

3

最佳答案
发表于 2017-2-13 16:37:23 | 显示全部楼层
在help里搜Constructing Spline Curves in 2D and 3D,看一下里面的内容对你有没有帮助

新手

10 麦片

财富积分


050


2

主题

11

帖子

0

最佳答案
 楼主| 发表于 2017-2-14 02:48:01 | 显示全部楼层
cookierun 发表于 2017-2-13 16:37
在help里搜Constructing Spline Curves in 2D and 3D,看一下里面的内容对你有没有帮助

谢谢您的帮助。看了help里的内容,它讲的是生成随机点,然后连接成样条曲线。不知道对于已经取得的固定点要如何处理,请赐教。

新手

27 麦片

财富积分


050


3

主题

23

帖子

3

最佳答案
发表于 2017-2-15 18:25:12 | 显示全部楼层
archerjason 发表于 2017-2-14 02:48
谢谢您的帮助。看了help里的内容,它讲的是生成随机点,然后连接成样条曲线。不知道对于已经取得的固定点 ...
  1. a11=[-0.5 -1.5 -2.5 -2.5 -3 -3 -2.5 -2.5 -1.5 -0.5 -0.5 0 0.5 0.5 1.5 1.5 2 2 1.5 1 1 1.5 2 2 1.5 1.5 0.5 0.5 0 -0.5 -0.5];
  2. b11=[0.866 0.866 0.866 0.866 0 0 -0.866 -0.866 -0.866 -0.866 -0.866 -1.732 -2.598 -2.598 -2.598 -2.598 -1.732 -1.732 -0.866 0 0 0.866 1.732 1.732 2.598 2.598 2.598 2.598 1.732 0.866 0.866];
  3. c11=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30];
  4. xyz = [a11;b11;c11];

  5. fnplt(cscvn(xyz),'r',2)
  6. hold off
复制代码


感觉这样也不是很满足你的要求。。
untitled.jpg

论坛优秀回答者

退役版主

2195 麦片

财富积分



46

主题

2112

帖子

303

最佳答案
  • 关注者: 144
发表于 2017-2-15 21:10:30 | 显示全部楼层
可以采取三次样条插值:
  1. X = spline(linspace(0,1,length(a11)),[a11;b11;c11],linspace(0,1,100));
  2. plot3(X(1,:),X(2,:),X(3,:))
  3. set(gca,'DataAspectRatio',[1 1 1]);
  4. set(gca,'xticklabel',[-4,-3,-2,-1,0,1,2,3,4]);
  5. set(gca,'yticklabel',[-4,-3,-2,-1,0,1,2,3,4]);
  6. grid on;
复制代码
请点击"回复此楼",否则我将无法收到回帖提醒。
问题如果比较复杂或较难,请邮箱联系kimist@qq.com

新手

11 麦片

财富积分


050


1

主题

20

帖子

0

最佳答案
发表于 2017-3-20 17:44:07 | 显示全部楼层
kastin 发表于 2017-2-15 21:10
可以采取三次样条插值:

版主你好,请问你了解非均匀有理B样条插值不,我在论坛里找到了非均匀有理B样条插值的代码,修改了可以用,但是仅仅50多个数据点,插值节点步长取0.001就需要接近5秒的时间才能完成,感觉很慢。请问你有这方面的使用经历没?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

快速回复 返回顶部 返回列表