问题描述
我正在尝试创建一个函数来生成贝塞尔曲线并将每个 x,y 位置保存在矩阵中。行数表示我将设置坐标的对象数,列数是函数生成的点(坐标)数。我正在尝试使用相同的函数为两个对象生成两条曲线,但是该函数第二次生成的新值没有保存在向量中,我不知道为什么。
这是我的代码
typedef struct
{
float coord_x,coord_y;
} coor_bezier;
std::vector <coor_bezier> coordinates_bz; //Save x,y
void beziercurves(int x0,int y0)
{
int x[4] = {x0,x0+200,x0,x0+300},y[4] = {y0,y0+250,y0+550,H};
coor_bezier arr;
float u;
for(u=0.0; u<=1; u+=0.005)
{
arr.coord_x=x[0]*pow(1-u,3) + x[1]*3*u*pow(1-u,2) + x[2]*pow(u,2)*3*(1-u) + x[3]*pow(u,3);
arr.coord_y=y[0]*pow(1-u,3) + y[1]*3*u*pow(1-u,2) + y[2]*pow(u,2)*3*(1-u) + y[3]*pow(u,3);
coordinates_bz.push_back(arr);
}
}
////GENERATE COORDINATES BEZIER CURVES
coor_bezier position,positionbz[2][201];
int k=100;
for(int i=0; i<2; i++)
{
beziercurves(k,0);
for(int j=0; j<201; j++)
{
position = coordinates_bz.at(j);
positionbz[i][j] = position ;
}
k=200;
}
解决方法
新值保存到向量中,但您没有读取新值,而是读取了两次添加的值。
新值添加到向量中而不清除向量,因此新值会在已经添加的值之后添加。
如果要读取新值,可以在添加元素之前存储要读取的偏移量,并使用该信息读取新值。
////GENERATE COORDINATES BEZIER CURVES
coor_bezier position,positionbz[2][201];
int k=100;
for(int i=0; i<2; i++)
{
size_t offset = coordinates_bz.size(); // save the offset
beziercurves(k,0);
for(int j=0; j<201; j++)
{
position = coordinates_bz.at(offset + j); // use the offset to read new values
positionbz[i][j] = position ;
}
k=200;
}