偶次非球面曲线拟合
前言
偶次非球面为旋转对称面,所以只需要得到一个截面上的离散点进行矢高公式的曲线拟合即可,然后将曲线旋转对称得到面型,或者将参数导入光学软件中得到透镜面。
一、矢高公式
以下公式为偶次非球面的矢高公式,z为矢高,r为截面到轴的距离,c为非球面的曲率,k为圆锥系数,ai为偶次非球面的 i 阶系数。
以下为某偶次非球面截面矢高图。
在已知离散点的情况下,我们相当于已知z和r的对应关系,需要得到的是k、c、ai的值。
二、曲线拟合
以下为参考代码:
% 非线性拟合P
% 实际曲线绘图
subplot(1,2,1);
plot(P(:,2),P(:,1));hold on;
% 拟合方程
digits(8)
Py = P(:,1);Pz = P(:,2);
% 系数矩阵a,a1设定为k,其余对应,a7设定为c,就是曲率
fun = @(a,Py)(a(7)*Py.^2./(1+sqrt(1-(1+a(1))*a(7)^2*Py.^2))+a(2)*Py.^4+a(3)*Py.^6+a(4)*Py.^8+ ...
a(5)*Py.^10+a(6)*Py.^12)% 偶次非球面矢高
a0 = [0,0,0,0,0,0,0];
a = lsqcurvefit(fun,a0,Py,Pz)
z = fun(a,Py);
plot(z,Py);
- P为离散点坐标矩阵,一共有n行2列。第一列为离散点坐标的y(可视为r),第二列为离散点坐标的z(即矢高)。
- 分别用Py和Pz来存储坐标数据,同时在写矢高方程“fun”时,通过@()来定义参数数组a和自变量Py,a为需要通过拟合得到的方程参数(可以参看代码中的注释),然后@()后的式子为非球面矢高方程,如果你要拟合其他方程,一样也是改。
- a0为参数数组a的初始值,即在非线性拟合迭代过程中,默认从a0设定的值开始计算。
- 然后使用 lsqcurvefit()函数进行拟合,可以得到参数矩阵a的值,然后将已知的参数矩阵a和Py带入矢高方程中,得到拟合的坐标点进行绘图。(还有其他拟合函数,可以参看help文档)
结果如下图:
今天的文章偶次非球面公式参数_高斯曲线拟合原理及实现分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/87671.html