微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

std::vector 不保存新数据

如何解决std::vector 不保存新数据

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。