b样条最小二乘曲线逼近

        给定若干数据点(0,1,·····,m),希望生成一条b样条曲线,尽可能的去逼近这些点。需要通过反求出控制点(0,1,···,n)生成逼近的b样条曲线。

给定数据点的b样条最小二乘逼近

 如图蓝色点的为给定需要逼近的数据点,红色的线为b样条曲线。

推导公式:

  1. 将给定的数据点进行参数化(使用向心参数法)
  2. 通过参数化后的数据点,推导出节点向量(下图中有公式先推d,m+1数据点个数,n+1为控制点个数,p为生成的b样条次数。节点向量中,有p+1个0,p+1个1,以及1到n-p个推导出的节点向量)
  3. 构建矩阵N(m-1,n-1),矩阵R_matrix(n-1,3),即可反求出控制点(1,n-1)。(将第一个数据点作为第一个控制点,将最后一个数据点作为最后一个控制点,加入反求出的控制点集中)矩阵运算使用eigen库。R_matrix与R有关,xyz为自定义的结构体,保存xyz坐标,datapoint为数据点,BasicFunctionValue为b样条基函数,u_k为数据点的参数化,R的代码如下:
    	for (int i = 1; i <= m - 1; i++)
    	{
    		xyz temp;
    		temp.x = datapoint.at(i).x - BasicFunctionValue(U_k.at(i), 0, p) * datapoint.at(0).x - BasicFunctionValue(U_k[i], n, p) * datapoint.at(m).x;
    		temp.y = datapoint.at(i).y - BasicFunctionValue(U_k.at(i), 0, p) * datapoint.at(0).y - BasicFunctionValue(U_k[i], n, p) * datapoint.at(m).y;
    		temp.z = datapoint.at(i).z - BasicFunctionValue(U_k.at(i), 0, p) * datapoint.at(0).z - BasicFunctionValue(U_k[i], n, p) * datapoint.at(m).z;
    		R.push_back(temp);
    	}

最小二乘公式
公式集

 #全文参考《非均匀有理b样条》第二版 清华大学出版社

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值