小编hrs*_*rst的帖子

参考2d向量中的元素(c ++)

我在粒子系统中有一个名为Spring的类.构造函数看起来像:

Spring(Particle& _a, Particle& _b);
Run Code Online (Sandbox Code Playgroud)

我有一个粒子矢量,我使用

Spring mySpring = Spring(myParticles.at(j),myParticles.at(j+1));
Run Code Online (Sandbox Code Playgroud)

在一个循环内部,在两个粒子之间增加一个弹力.到目前为止一切正常.但是,我想使用粒子的2d矢量.那是:

Spring mySpring = Spring(myParticles.at(i).at(j),myParticles.at(i).at(j+1));
Run Code Online (Sandbox Code Playgroud)

而且我没有得到粒子的参考.在第一个例子中,每当我在spring类中更改粒子时,向量中的粒子都会发生变化.在第二个示例中,更改仅在本地进行.如何更改2D矢量中的粒子?

编辑:我试着说清楚一些事情:

我有一些粒子系统,每个粒子系统都由许多粒子组成.每个粒子只应与其自身处于同一系统中的其他粒子相互作用.因此,我有一个粒子系统向量,每个粒子系统都是粒子对象的向量.(这使得2d矢量).第一维(i)是系统,第二维(j)是单个粒子.系统中的粒子相互作用(碰撞,避免,等等......)并且它们的位置发生变化.矢量得到"更新".(即参考作品).

但是,我有第二个(1d)弹簧力矢量.弹簧力也用于更新颗粒的位置.我的构造函数执行以下操作:

Spring::Spring(Particle& _a, Particle& _b) {
    a=&_a;
    b=&_b; }
Run Code Online (Sandbox Code Playgroud)

a和b是粒子*.所以我存储指向2d向量中的两个粒子的指针.另一个函数Spring.doSpring()改变了粒子的位置.

a->pos.x=300;
Run Code Online (Sandbox Code Playgroud)

要么

a->velocity+=something..
Run Code Online (Sandbox Code Playgroud)

在我发布的第一个例子中,我只使用了一个粒子系统,因此不需要二维矢量.一切正常.向量中的粒子得到更新.但是第二个例子我的程序运行但不管doSpring函数做了什么,2d向量中的粒子都没有得到更新.

c++ reference vector

5
推荐指数
3
解决办法
9389
查看次数

标签 统计

c++ ×1

reference ×1

vector ×1