三次B样条曲线插值c++

本文介绍了如何使用C++实现三次B样条曲线的插值方法。通过离散点反求控制点,然后利用控制点进行拟合。具体原理参考了相关文章,并提供了实现代码,最终展示出插值曲线的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

B样条拟合通常把离散点集作为控制点来求拟合曲线,原理和过程可参看https://blog.csdn.net/cnmgbmsdn/article/details/108141194。
如果想要求得过离散点的插值曲线,需要先用离散点反求控制点,然后用求得的控制点拟合曲线。原理在这篇文章中介绍较详细http://www.doc88.com/p-5714423317458.html
在这里插入图片描述如图,P是控制点,V是离散点,左侧参数矩阵的逆矩阵乘以V矩阵就能得到P矩阵。c++代码如下:

/*
通过离散点集反求控制点
*/
vector<Point2f> BSplineInterpolate(vector<Point2f> discretePoints) {
   
	int N = discretePoints.size();
	Mat weight = Mat::zeros(Size(N,N), CV_32F);
	for (int i = 0; i < weight.rows; i++) {
   
			weight.ptr<float>(i)[i] = 1;
			weight.ptr<float>(i)[(i+1)%weight.cols] = 4;
			weight.ptr<float>(i)[(i+2)%weight.cols] = 1;
	}
	
	Mat V 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值