【发布时间】:2010-02-05 12:04:27
【问题描述】:
我在粒子系统中有一个名为 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));
而且我没有得到对粒子的引用。在第一个示例中,每当我更改 spring 类中的粒子时,向量中的粒子都会更改。在第二个示例中,更改仅在本地进行。如何更改 2D Vector 中的粒子?
编辑: 我试着把一些事情说清楚:
我有一些粒子系统,每个系统都由许多粒子组成。每个粒子只应与与自身处于同一系统中的其他粒子相互作用。因此,我有一个粒子系统向量,每个粒子系统都是粒子对象的向量。 (这使得二维向量)。第一个维度 (i) 是系统,第二个维度 (j) 是单个粒子。 系统中的粒子相互影响(碰撞、躲避等等)并且它们的位置发生变化。并且向量得到“更新”。 (即参考有效)。
但是,我有第二个 (1d) 弹簧力向量。弹簧力也用于更新粒子的位置。 我的构造函数执行以下操作:
Spring::Spring(Particle& _a, Particle& _b) {
a=&_a;
b=&_b; }
a 和 b 是粒子*。所以我在二维向量中存储了指向两个粒子的指针。另一个函数 Spring.doSpring() 改变粒子的位置。
a->pos.x=300;
或
a->velocity+=something..
在我发布的第一个示例中,我只使用了一个粒子系统,因此不需要二维向量。一切正常。向量中的粒子得到更新。 但是在第二个示例中,我的程序运行了,但不知何故,无论 doSpring 函数做什么,二维向量中的粒子都不会更新。
【问题讨论】:
-
你是如何声明“myParticles”的?
-
嘿,来自drdobbs.com/cpp/184401863 的提示:“不要过度立法命名,但要使用一致的命名约定:只有两个必须做的事情:a) 永远不要使用“卑鄙的名字”以下划线开头或包含双下划线;" Herb Sutter 和 Andrei Alexandrescu 的话