【发布时间】:2015-03-20 22:34:43
【问题描述】:
背景:我想实现一个 3-d 碰撞检测算法,并且想将搜索空间分割成立方体,这样我只在对象足够近时才检查碰撞。
实际问题:我正在考虑使用向量数组来存储指向要迭代的对象的指针。例如 box[0][0][0] 将是一个向量,其中包含指向模拟空间一个角落的对象的指针。无论这是否是最佳解决方案,我都想知道 c++ 如何处理向量数组。数组是否会保存指向向量的指针,以便它们随后的重新分配对数组的有效性没有影响,或者向量是否会在数组内部创建然后移出,从而导致未定义的行为?
类似问题没有针对此实施细节的具体答案。对不起,如果这实际上在其他地方得到了回答,我错过了。
【问题讨论】:
-
如果您使用向量,则使用向量来保存向量。如果您知道编译时的大小,也可以使用
std::array。 -
问题更多是关于向量如何存储在内存中,而不是我将如何实现这个特定项目,但感谢您的建议。
-
3d 数组想法的唯一问题是它在最坏情况下的性能非常差。最坏的情况是模拟中的所有内容都在 box[x][y][z] 中,而所有其他框都是空的。根据域中实体的数量及其相对大小,您可能只考虑单个平面数组,而不是尝试对空间进行分区。
-
我使用的球体倾向于在 x 和 z 轴上均匀分布,但不在 y 轴上(因为它们最终会在地板上)所以我认为二维分区是最好的解决方案。但是,出现的问题实际上是关于向量数组的行为方式,而不是解决这个问题的最佳方法。这将保证它自己的问题。