matlab练习程序(螺线拟合)
2024-09-20 10:27:47
这里待拟合的螺线我们选择阿基米德螺线,对数螺线类似。
螺线的笛卡尔坐标系方程为:
螺线从笛卡尔坐标转为极坐标方程为:
阿基米德螺线在极坐标系下极径r和极角theta为线性关系,方程为:
计算步骤如下:
1.通常我们首先得到螺线在笛卡尔坐标下的一些点x,y。
2.然后根据x,y计算出r和theta。
3.最后拟合的目标就是计算出a和b,这一步可以用最小二乘。
拟合结果:
下图蓝色线为原始线(这里可能看不到),红色线为拟合线,红色点为测量点。
放大看一下:
不过有时候拟合也会失败(这时候就可以祭出ransac大法了):
matlab代码如下:
clear all;
close all;
clc; %%生成阿基米德螺线
a=6.34;
b=4.23;
theta=:0.01:*pi;
r = a+b*theta; x = r.*cos(theta);
y = r.*sin(theta);
plot(x,y,'b') %%生成待拟合数据
ind = randperm(length(x),);
dat=[x(ind)' y(ind)'] + rand(,)/;
hold on;
plot(dat(:,),dat(:,),'r.'); T = atan(dat(:,)./dat(:,));
R = sqrt(dat(:,).^+dat(:,).^); %%因为T是周期为pi循环数列,因此需要根据不同圈数加pi
D=[R T];
D=sortrows(D);
E=D;
n = ;
for i=:length(D)
if D(i,)-D(i-,)< && D(i,)<
n=n+;
end
E(i,) = E(i,) + n*pi;
end X = [E(:,) ones(length(dat),)];
Y = E(:,);
C = inv(X'*X)*X'*Y; theta=:0.01:*pi;
r = C()+C()*theta;
x = r.*cos(theta);
y = r.*sin(theta);
plot(x,y,'r') %%生成对数螺线
a=1.34;
b=2.23;
theta=:0.01:*pi;
r = a*exp(b*theta/); x = r.*cos(theta);
y = r.*sin(theta);
figure;
plot(x,y) ind = randperm(length(x),);
dat=[x(ind)' y(ind)'] + rand(,)/;
hold on;
plot(dat(:,),dat(:,),'r.');
最后还生成了对数螺线,大家可以自行尝试拟合一下哈。
最新文章
- 教你轻松计算AOE网关键路径(转)
- Nginx下css的链接问题
- Java文件读写操作指定编码方式防乱码
- canvas像素操作
- GIt 从入门到放弃
- c++ boost 汉字和模式串混用的例子
- 问题-[VMware Workstation]断电后,重启电脑,之后就提示“内部错误”
- 配置CAS错误No Certificate file specified or invalid file format
- SQL复制表结构和数据
- 国外流行的共享网站实现:facebook,twitter,google+1,tumblr等待
- JavaScript的基本类型总结
- JavaScript 开发工具webstrom使用指南
- appium python andiroid自动化文档整理笔记。
- vue获取下拉框值
- 【搭建】MongoDB在Linux环境的搭建
- JS 单线程和事件循环
- gitment Error:validation failed错误解决办法
- Cocos Creator_发布到微信小游戏平台
- Mongodb常用增删改查语法
- JSP(Servlet)中从连接池获取连接
热门文章
- 批发市场收记账管理系统(iPad与手机版)水产批发市场客户欠账、还款管理水产宝介绍 第八章 财务(应收账款,应付账款,已收账款,已付账款)
- Shell脚本监控CPU、内存和硬盘利用率
- nginx 校验及重启
- Cocos2d-x开发教程——《萝莉快跑》
- pycharm连接远程python的开发环境
- synchronized&;volatile
- java架构之路(Sharding JDBC)mysql5.7yum安装和主从
- (转)GitHub Desktop 拉取 GitHub上 Tag 版本代码
- DevExpress的进度条控件ProgressBarControl的使用-以ZedGraph添加曲线进度为例
- 配置linux 防火墙,只有固定IP和端口才能能访问完美解决