⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spine.h

📁 样条类的C++,该类包括三次样条的插值,拟合和B样条的插值,拟和等功能 。自己编写的简单适用的函数
💻 H
字号:
// Spine.h: interface for the CSpine class.
//
///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
//样条类的申明,该类包括三次样条的插值,拟合和B样条的插值,拟和等功能          ///////
//初始输入为n个节点(1,2...,n)的坐标值和数据值                               ///////
//注意要调用CMatrix类,请加入Matrix.h头文件                                  ///////
//参考教材:测量与数据建模      
//robinsin设计,2006                                             ///////
///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_SPINE_H__692DDE31_D981_42D8_BD27_F5B1DF5AF832__INCLUDED_)
#define AFX_SPINE_H__692DDE31_D981_42D8_BD27_F5B1DF5AF832__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//矩阵头文件
#include"Matrix.h"

class CSpine  
{
public:	
	//
	//构造函数和初始函数
	//
	CSpine();//默认构造函数
	CSpine(int nNum,double pTime[],double Data[]);//构造函数,分配内存,
	CSpine(const CSpine& other);// 拷贝构造函数
	BOOL Init(int nNum);//分配内存
	virtual ~CSpine();//析构函数
	void SetTime(double Time[]);//设置坐标点
	void SetData(double Data[]);//设置坐标点的函数值
	double* GetTime() const;
	double* GetData() const;
	//
	//函数操作
	//
	//B样条插值和拟合有关函数
	//--------------------------------------------------------------------------------------
	//下面四个函数是B样条拟合的有关函数,参看<测量与数据建模>62页
	double  BSpineFit(int nParameter,int nType);//B样条拟合函数。返回B样条拟合后的标准误差(核心函数,必须调用)
	double* GetBSpineFitPointer() const;//返回B样条拟合后的参数指针.注:使用前请调用 GetBSpineFit函数
	double  GetBSpineFitValue(double x,int nParameter,int nType) ;//给定一个点,求B样条拟合后给定一个点求值。注:使用前请调用 GetBSpineFit函数,且参数必须一样
	double ggBFuction(double x,int nType);//内部函数,计算nType-1次(即nType阶)B样条的值
	//------------------------------------------------------------------------------------------------------
	//
	//------------------------------------------------------------------------------------------
	//下面两个函数是有关三次样条插值的函数。参看成礼智的计算方法英文教材148页,本函数参考了作者以前的三次样条函数
	double *ThreeSpineInsert(UINT nType,double Border[2]);//三次样条插值函数,可以指定5种不同边界类型,返回参数指针(核心函数,必须调用)
	double *GetThreeSpineInsertPointer() const;//返回3次样条插值后的参数指针(4*nNum-4个,每个区间4个参数).注:使用前请调用 ThreeSpineInsert函数
	double  GetThreeSpineInsertValue(double x) const;//任给一点,求三次样条插值后的值。注:使用前请调用 ThreeSpineInsert函数
	//--------------------------------------------------------------------------------------------------
	//
public:
	//
	//初始数据
	//
	int m_nNum;//初始数据的个数,大于等于4
	double* m_pTime;//坐标点的位置,如a=t0<t1<t2<...<tn-1=b,(即n=nNum)需要初始指定
	double* m_pData;//坐标点的位置的函数值,即f(t0),f(t1),...,f(tn-1),需要初始指定
	//
	//返回参数的指针
	//
	double* m_p3SpineInsert;//三次样条插值的返回参数(4*nNum-4),在调用Get3SpineInsert函数时分配内存
	double* m_p3SpineFit;//三次样条拟和的返回参数(参数个数需要用户指定)在调用Get3SpineFit函数时分配内存
	double* m_pBSpineInsert;//B样条插值的返回参数(nNum+2),在调用GetBSpineInset函数时分配内存
	double* m_pBSpineFit;//B样条拟和的返回参数(参数个数需要用户指定)在调用GetBSpineFit函数时分配内存


};

#endif // !defined(AFX_SPINE_H__692DDE31_D981_42D8_BD27_F5B1DF5AF832__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -