我有一个名为Spring的类,它是粒子系统中的一部分。构造函数如下:
Spring(Particle& _a, Particle& _b);
我有一个粒子的向量,并且我使用
Spring mySpring = Spring(myParticles.at(j),myParticles.at(j+1));
在循环中添加两个粒子之间的弹簧力。到目前为止一切都运行良好。 然而,我想使用一个二维粒子向量。即:
Spring mySpring = Spring(myParticles.at(i).at(j),myParticles.at(i).at(j+1));
我不明白这个粒子的引用。在第一个例子中,每当我更改我的弹簧类中的粒子时,向量中的粒子会被更改。在第二个例子中,更改只是本地的。如何更改2D向量中的粒子?
编辑: 我想澄清一些事情:
我有一些粒子系统,每个系统由若干粒子组成。每个粒子只能与属于自己的相同系统中的其他粒子互动。因此,我有一个粒子系统的向量,其中每个粒子系统都是粒子对象的向量。(这使得2D向量的作用)。第一维(i)是系统,第二维(j)是单个粒子。 系统中的粒子彼此互动(碰撞、避免等),它们的位置会发生变化。并且向量会“更新”。(即,引用有效)。
但是,我有一个第二个(1D)弹簧力的向量。弹簧力也用于更新粒子的位置。 我的构造函数执行以下操作:
Spring::Spring(Particle& _a, Particle& _b) {
a=&_a;
b=&_b; }
假设a和b都是Particle*类型,因此我将这两个粒子的指针存储在2D向量中。另一个名为Spring.doSpring()的函数会更改粒子的位置。
a->pos.x=300;
或者
a->velocity+=something..
在我发布的第一个示例中,我只使用了一个粒子系统,因此不需要2D向量。一切都很好。向量中的粒子被更新。 但是在第二个示例中,我的程序运行正常,但无论doSpring函数做什么,2D向量中的粒子都不会被更新。