64,649
社区成员
发帖
与我相关
我的任务
分享
double* non0basisFuns = new double[4];
#include "Geometry.h" //这是自己写的几何类相关头文件
#include <iostream>
int main()
{
cBSpline3* testSpline = new cBSpline3; //3次B样条类,定义于Geometry.h中
cPoint* points = new cPoint[5]; //cPoint是表示点的类,定义于Geometry.h中
points[0].set(0, 0, 0); //给各个点赋值
points[1].set(3, 4, 0);
points[2].set(-1, 4, 0);
points[4].set(-4, 0, 0);
points[5].set(-4, -3, 0);
cVector startDir, endDir; //自己写的向量类,笛卡尔坐标系的x/y/z坐标
startDir.set(0, 0, 0); //给向量赋值
endDir.set(0, 0, 0);
testSpline->spline3_construct(points, 5, startDir, endDir, 3); //构建样条曲线的方法。根据点序列和两个切向量构建样条曲线
delete testSpline;
delete[] points;
system("pause");
return 0;
}
//返回值:成功返回0,出错返回1
int cBSpline3::spline3_construct(cPoint* pointList, int numOfPoints, cVector startDir, cVector endDir, int demension)
{
if (numOfPoints < 5) //至少应该有5个数据点,这样才会至少有1个非零、非1节点
{
return 1;
}
//删除旧的动态成员,在构建新的样条曲线之前,将曲线相关变量复位。B样条的信息由控制点序列和节点向量组成
if (controlPointList != NULL) //控制点数组,类型是cPoint* ,是cBSpline3类的属性
{
delete[] controlPointList;
controlPointList = NULL;
numOfControlPoints = 0;
}
if (knotVector != NULL) //节点向量,类型是double* , 是cBSpline3类的属性
{
delete[] knotVector;
knotVector = NULL;
numOfKnots = 0;
}
int i, j;
int span;
double* non0basisFuns = new double[4]; //调试的时候,到这里就出错了
double tempReal; //浮点数临时存储
double totalChordLength = 0; //总弦长
double* tempParam = new REAL[numOfPoints];
//接下来还用了Eigen库来做矩阵运算,很长,就不贴了。
int cBSpline3::spline3_construct(cPoint* pointList, int numOfPoints)
{
int i, j;
int span;
double* non0basisFuns = new double[4]; //这里触发了异常,把4改成3/5/10/40等都没有触发异常
//这是一个拟合曲线的函数,参数中cPoint是自己写的描述坐标点的类:cPoint{double x; double y; double z;}
//...
}