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

📄 fixsupcurve.cpp

📁 c++实现固支三次样条曲线
💻 CPP
字号:
#include "fixsupCurve.h"

fixsupCurve::fixsupCurve(void)
{
}
fixsupCurve::fixsupCurve(int n,double temX[],double temY[],double dfxo,double dfxn)
{
	setPoint(n,temX,temY,dfxo,dfxn);
	CalPara();
}
bool fixsupCurve::setPoint(int n,double temX[],double temY[],double dfxo,double dfxn)
{
	if(n>1000||n<1)return false;
	num=n;
	FPO=dfxo;
	FPN=dfxn;
	for(int i=0;i<=n;i++)
	{
		x[i]=temX[i];
		f[i]=temY[i];
	}
	return true;
}
void fixsupCurve::CalPara()
{
	int i;
	double h[1000],arfa[1000],l[1000],mu[1000],zed[1000];
	for(i=0;i<num;i++)
	{
		a[i]=f[i];
		h[i]=x[i+1]-x[i];
	}
	a[num]=f[num];
	arfa[0]=3*(a[1]-a[0])/h[0]-3*FPO;
	arfa[num]=3*FPN-3*(a[num]-a[num-1])/h[num-1];
	for(i=1;i<num;i++)
	{
		arfa[i]=3*(a[i+1]-a[i])/h[i]-3*(a[i]-a[i-1])/h[i-1];
	}
	l[0]=2*h[0];
	mu[0]=0.5;
	zed[0]=arfa[0]/l[0];
	for(i=1;i<num;i++)
	{
		l[i]=2*(x[i+1]-x[i-1])-h[i-1]*mu[i-1];
		mu[i]=h[i]/l[i];
		zed[i]=(arfa[i]-h[i-1]*zed[i-1])/l[i];
	}
	l[num]=h[num-1]*(2-mu[num-1]);
	zed[num]=(arfa[num]-h[num-1]*zed[num-1])/l[num];
	c[num]=zed[num];
	for(i=num-1;i>=0;i--)
	{
		c[i]=zed[i]-mu[i]*c[i+1];
		b[i]=(a[i+1]-a[i])/h[i]-h[i]*(c[i+1]+2*c[i])/3;
		d[i]=(c[i+1]-c[i])/(3*h[i]);
	}
}
double * fixsupCurve::getpara_A()
{
	return a;
}
double * fixsupCurve::getpara_B()
{
	return b;
}
double * fixsupCurve::getpara_C()
{
	return c;
}
double * fixsupCurve::getpara_D()
{
	return d;
}
double **fixsupCurve::getParaMatrix()
{
	int i=0;
	for(i=0;i<4;i++)
	{
		ParaMatrix[i]=new double[num];
	}
	for(i=0;i<num;i++)
	{
		ParaMatrix[0][i]=a[i];
		ParaMatrix[1][i]=b[i];
		ParaMatrix[2][i]=c[i];
		ParaMatrix[3][i]=d[i];
	}
	return ParaMatrix;
}
fixsupCurve::~fixsupCurve(void)
{
}

⌨️ 快捷键说明

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