【问题标题】:std::vector does not save new datastd::vector 不保存新数据
【发布时间】:2021-05-15 13:25:23
【问题描述】:

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

【问题讨论】:

  • 看起来新值已保存,但您只是读取第一个值两次。
  • @MikeCAT 你能解释一下吗?
  • OT: typedef struct{ } name; 在 C 中使用,但在 C++ 中你可以只使用 struct name{ };
  • 值被添加到向量coordinates_bz。一次调用 beziercurves 将向向量添加 201 个元素。该向量永远​​不会被清除(至少在发布的代码中)。因此,前 201 个元素将在第一次调用 beziercurves 时添加,接下来的 201 个元素将在第二次调用 beziercurves 时添加。像这样将两组值添加到向量中,但是您的代码正在读取前 201 个元素(由第一次调用添加)两次。

标签: c++ function iterator stdvector


【解决方案1】:

新值保存到向量中,但您没有读取新值,而是读取了第一次添加的值两次。

将新值添加到向量中而不清除向量,因此新值将添加到已经添加的值之后。

如果要读取新值,可以在添加元素之前存储要读取的偏移量,并使用该信息读取新值。

////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;
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    相关资源
    最近更新 更多