检查大网格上的放置重叠
Check for placement overlap on large grid
我正在开发一款游戏,将通过连接器连接的建筑放置在矩形网格上。没有什么可以重叠。建筑物和连接器一旦进入电网,就不能改变;它们随时都可能被摧毁。栅格的定义使左下角为(0,0)。
这些建筑是矩形的,每个边缘可以有1-4个单元长;还有一个5x5的正方形。
连接器有起点和终点。它们不能重叠,并且有1个单位宽。他们可以直线前进编辑:(左、右、上、下),并在任何地方弯曲90度。长度不限。
理想情况下,网格会非常大(200x200或更大),但这意味着可以有数千个这样的对象和连接器。
当一个对象被构建时,我需要检查它是否与任何东西重叠。如果我制作一个比特网格,它的大小将超过300x300。如果我列出所有对象,我可以在一定范围内搜索,但我该如何处理连接器?
由于二维比特数组是不可能的,我必须对所有建筑进行索引,然后按x坐标和y坐标对它们进行排序。我可以线性搜索连接器,但这会非常乏味和痛苦。
有人有什么建议吗?附言:我在C++中这样做
除了300x300不是很大之外,如果你真的想要,你可以将布尔值打包成一个字节内的位(但出于速度原因,我不建议这样做),你可以检查连接器是否与一个简单的函数相交:https://stackoverflow.com/a/565282/2436175
假设您已经检查了新建筑没有与任何其他建筑相交,那么需要检查的是新建筑(线段)的一侧没有与任何已就位的连接件相交。
相关文章:
- Ardunio UNO解决了多个重叠的定时器循环
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 算术序列与区间的最大重叠
- 使用对象文件读取三角形数据网格
- 按顺序声明的字符数组重叠
- 如何从 Skia 路径几何体中获取网格?
- 拆分重叠段
- CGAL:如何创建填充边界曲线的曲面网格?
- 检查 2D 网格的某个元素是否与另一个元素共享对角线、水平线或垂直线
- 创建具有两个视口的Qt3D C++场景,其中显示适当的不同网格
- 如何从 3D 曲面网格中删除自相交三角形?
- 在均匀网格中处理碰撞
- 更改高度贴图,使其在 4x4 网格上显示 16 个 hieghtmap
- 用于查找网格中最短路径的算法
- 循环通过网格获取温度,但不知道如何告诉程序停止循环
- 纹理单位重叠?渲染了错误的纹理
- 什么可以防止类中相邻成员重叠
- 使用 glvertex4i 传递网格面索引时的顶点着色器错误
- 如何在使用网格布局时重叠qwidgets,并将重叠的widget定位在距离窗口边界特定距离的位置
- 检查大网格上的放置重叠