//文件名:splineinsert.cpp
/*************************************************************************
*
* 函数名称:
* splineinsert()
*
* 参数:
* InContourSide - 存储内轮廓的节点链表
* 返回值:
* BOOL - 运算成功返回TRUE,否则返回FALSE。
*
* 说明:
* 该函数用于输出提取出的轮廓数据。
*
* 要求轮廓图象已经过扫描,建立起轮廓图象,对轮廓数据进行三次样条插值。
************************************************************************/
//通过此函数调用三次样条插值
BOOL WINAPI splineinsert(ChainHead* InContourSide,ChainHead* ReplaceSide)
{
int i,j,k;
int direction;
int LongSize;
int TotalSize,other;
ChainHead* pChain;
Node* pNode = NULL;
Node* mNode = NULL;
Node* sNode = NULL;
Node* BreakNode = NULL;
int MidFlag;
Node* MinNode = NULL;
Node* MaxNode = NULL;
//边界条件,即假定边界为切矢无穷大
double yp1 = 1.7E30;
double ypn = 1.7E30;
/*
此处代码省,目的是把轮廓分成上下两条
因为样条插值要求沿一个方向是增大/减小的
*/
//x,y 是输入的坐标值 n是数据点的个数
//yp1,ypn是端始点的二阶导数值 y2为输出的二阶导数值
spline(Xb, Yb, k, yp1, ypn, y2);
LongSize = (int)(MaxNode-> x-MinNode-> x)+1; //插值点的个数
double* sig = new double[LongSize];
double* xcha = new double[LongSize];
xcha[0] = Xb[0];
for(i=1; i <LongSize; i++)
{
xcha[i] = xcha[i-1]+1;
}
for(i=0; i <=LongSize; i++)
{
splint(Xb, Yb, y2, k, xcha[i], sig[i]);
}
- 1
- 2
- 3
- 4
- 5
前往页