Articles of 空间划分

我怎样才能find最接近给定2D点的物体?

我有一个对象的数组。 他们的位置是一个Vector2 。 我想select最接近的对象,给定一个代表用户在屏幕上触摸的X和Y坐标。 我怎样才能做到这一点?

寻找我的自顶向下浏览器游戏的2D空间分区方法

您好,我目前正在使用由Christer Bystrom编写的空间哈希algorithm的修改版本。 这个algorithm对于碰撞检测是可以的。 但是,当我使用它来检测有兴趣的范围内的实体时,它有其局限性。 我使用一个巨大的地图。 (10000×10000像素)当我移动我的播放器时,我希望看到屏幕上我的播放器周围有什么。 有时候,有些实体在我面前或者在我后面,但是我看不到屏幕上的任何东西,直到我真的接近。 这是我为该algorithm创建的一个可视化演示。 我修改它以与圆对象一起使用。 在演示图片中,我已经将powerOfTwo属性设置为9,这非常大。 绿色的圆圈是我的鼠标位置。 红色圆圈是我的玩家感兴趣的领域内的那些实体。 但这不是一个好的解决scheme。 玩家应该能够看到周围的各个方向的东西,并进一步伸展到大小相同的矩形区域持有这些红色圆圈。 所以我正在寻找一个更好的解决scheme来实现我的游戏。 我希望对于感兴趣的领域内的实体进行检测是准确和快速的,最好不要太难理解。 它可以是任何其他方式(四叉树,dynamic树,RTree或任何适合我制作的游戏types)。 我也读过这方面的内容 ,但不确定这些方法是否适合利益管理。

我应该多长时间对自上而下的MMO 2D游戏进行空间分割?

我正在编写像agario / diep.io这样的自上而下的2D游戏,我使用空间哈希来检测屏幕对象。 但是,我发现每秒做几次空间分区太昂贵了。 (我以250ms的间隔进行)我在地图上有大约5000个对象,同时平均在屏幕上有150个对象。 我发现reddit.com上的agario开发者发表了一篇文章,其中提到我们可以通过跟踪玩家的位置并在特定节点(使用四叉树)上执行对象插入来减less空间分区。 我想知道这是否也可以使用空间哈希来完成。

如何渲染在64位浮点环境中表示的几何graphics?

在这个关于星际公民的video中 ,在时间线的12:30标记处,你可以看到玩家放大的位置明显超出了32位浮点数的极限。 据我所知,在这个游戏中,他们使用64位浮点精度进行位置计算。 我想实现类似的东西:一个环境,其中的对象用64位浮点精度表示,但仍然可以在32位GPU上呈现。 我不明白Star Citizen如何能够以32位GPU正确比例渲染它,因为我已经读过大多数GPU在双精度模式下运行速度慢了3倍。 换句话说,我应该如何将顶点位置和其他渲染数据精确地传递给底层渲染硬件? 我应该怎么做的数据在32位的空间? 还是应该使用双精度GPU?

理解空间哈希函数行为和int64的Knuth

我实现了开放索引稀疏2D空间HashMap,并且我对性能非常满意(〜30-70个CPU周期以获得大小约为16的Milion对象在特定位置的对象)。 但是,我不明白hashFunction的行为。 只是通过试验和错误,我发现对我的情况最好的performance是稍微修改Knuth的散列函数: return i * 2654435761 >> 8; (原Knuth的散列函数是return i * 2654435761 >> 16; ) 使用这个散列函数,我得到不超过1-2个桶配对相同的散列(容量足够时)…直方图看起来像: 689780 without collision (buckets mapped to same hash) 358791 with 1 colision 5 with 3 collisions 但我不知道为什么,为什么它比>>16 >>8更好>>8 ),如果这种行为是一般的或某种特定于我的设置 我也试过其他的散列函数,用作伪随机生成器..有些在这里: inline ULONG hashFunc( ULONG i ) { // see http://stackoverflow.com/questions/664014/what-integer-hash-function-are-good-that-accepts-an-integer-hash-key //return ( ( 2166136261UL ^ i ) * […]

如何select单元格将实体放入用于广泛相位碰撞检测的统一网格中?

我试图实现我的碰撞检测algorithm的广泛阶段。 我的游戏是一个街机游戏,在空间相对较大的空间中有很多移动实体。 关于上述规格,我决定使用统一的网格进行空间分割。 我所知道的问题是如何有效地select在哪个单元格中添加一个实体。 ATM我正在做这样的事情: for (int x = 0; x < gridSize; x++) { for (int y = 0; y < gridSize; y++) { GridCell cell = grid[x][y]; cell.clear(); //remove the previously added entities for (int i = 0; i < entities.size(); i++) { Entity e = entities.get(i); if (cell.isEntityOverlap(e)) { cell.add(e); } } […]

用于将多个矩形“修复”为较less数量的矩形的algorithm?

说我有一个不同形状和颜色的矩形网格,我想减less(合理地接近最佳是好的,最好是没有必要的)矩形的数量来表示相同的颜色布局。 上面的图像是一个非常简单的情况,矩形之间的空白仅用于可视化 – 它们实际上会被紧密包装。 什么是方法或algorithm的名称(开心谷歌),可以帮助我做到这一点?

轴alignment空间分割:将空间分成随机矩形?

我需要一种方法将三维空间分为随机轴alignment的盒子形状。 目前我正在为testing目的划分2d空间。 我提出的最直接的方法是定义一个大小的矩形(1,1),然后将所有现有的矩形recursion地拆分为两个在X轴和Y轴之间交替的不平坦矩形。 这里的问题是显而易见的。 这种方法会导致很长的拉伸线(用红色标出) 我想要的是更有机看起来(我包括一个例子) 看,从上到下或从左到右没有长的直线。 唯一的限制是我可能希望限制矩形的最小尺寸而不影响尺寸的粒度。 即如果最小矩形是1平方厘米比秒数最小的房间不应该是2平方单位。 所以理想的algorithm应该满足以下三个约束条件: 矩形不是微小的。 矩形尺寸不是最小矩形尺寸的离散乘法。 即如果最小矩形是3平方的单位,比较大的矩形不限制为6,9,12等平方单位,相反可以是3.2或4.7)。 该algorithm运行在多项式时间(需要快速计算)。