std::vector 不保存新数据

std::vector does not save new data

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