std::vector不保存新数据

std::vector does not save new data

本文关键字:数据 保存 vector std 新数据      更新时间:2024-09-21

我正在尝试制作一个函数来生成贝塞尔曲线,并将每个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;
}