这里待拟合的螺线我们选择阿基米德螺线,对数螺线类似。
螺线的笛卡尔坐标系方程为:
 
螺线从笛卡尔坐标转为极坐标方程为:
 
阿基米德螺线在极坐标系下极径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.');

最后还生成了对数螺线,大家可以自行尝试拟合一下哈。

最新文章

  1. 教你轻松计算AOE网关键路径(转)
  2. Nginx下css的链接问题
  3. Java文件读写操作指定编码方式防乱码
  4. canvas像素操作
  5. GIt 从入门到放弃
  6. c++ boost 汉字和模式串混用的例子
  7. 问题-[VMware Workstation]断电后,重启电脑,之后就提示“内部错误”
  8. 配置CAS错误No Certificate file specified or invalid file format
  9. SQL复制表结构和数据
  10. 国外流行的共享网站实现:facebook,twitter,google+1,tumblr等待
  11. JavaScript的基本类型总结
  12. JavaScript 开发工具webstrom使用指南
  13. appium python andiroid自动化文档整理笔记。
  14. vue获取下拉框值
  15. 【搭建】MongoDB在Linux环境的搭建
  16. JS 单线程和事件循环
  17. gitment Error:validation failed错误解决办法
  18. Cocos Creator_发布到微信小游戏平台
  19. Mongodb常用增删改查语法
  20. JSP(Servlet)中从连接池获取连接

热门文章

  1. 批发市场收记账管理系统(iPad与手机版)水产批发市场客户欠账、还款管理水产宝介绍 第八章 财务(应收账款,应付账款,已收账款,已付账款)
  2. Shell脚本监控CPU、内存和硬盘利用率
  3. nginx 校验及重启
  4. Cocos2d-x开发教程——《萝莉快跑》
  5. pycharm连接远程python的开发环境
  6. synchronized&amp;volatile
  7. java架构之路(Sharding JDBC)mysql5.7yum安装和主从
  8. (转)GitHub Desktop 拉取 GitHub上 Tag 版本代码
  9. DevExpress的进度条控件ProgressBarControl的使用-以ZedGraph添加曲线进度为例
  10. 配置linux 防火墙,只有固定IP和端口才能能访问完美解决