【问题标题】:How to handle corner-cases of a wrap-around grid?如何处理环绕网格的角落情况?
【发布时间】:2015-09-04 17:42:41
【问题描述】:

我想使用“无尽”网格,其中独立移动的点通过左侧重新进入右侧网格,反之亦然,顶部/底部相同。我的问题是如何处理极端情况。

我的想法:
1. 将网格设为矩形并假设角属于较长的边,但是我很难处理覆盖角两侧的点簇;
2. 使网格边的长度动态可变,并在需要时选择环绕边,以便环绕始终为 L-R 或 T-B
3. 上述的混合,但环绕是对角相对的角和边,例如:假设点离开 TL-corner,然后它重新进入 BR-corner。但这又将无法处理一组点 - 点独立移动,但必须保持明显的接近度。

关于如何处理这个问题的任何想法/用例? (有可能吗?)

【问题讨论】:

  • 您列出了可能的解决方案,但我在这里看不到任何极端情况。从技术上讲,您在顶部描述的是圆环的表面。比如说x in [0..w)y in [0..h)。任何时候xy 发生变化,分别取余数模wh
  • @Gassa:我不得不去看看如何处理负数的模并学到了一些东西,谢谢 :) 这可能是答案,我必须测试一下。

标签: algorithm


【解决方案1】:

将一个点移动到对角的对角有什么问题?也就是说,如果一个点正好进入一个角,则将它移动到对角线的对面。如果一个点不是完全进入一个角,而是靠近一个角的一侧,则仅环绕该侧,如果一个点然后进入另一侧(如果一个点正在移动,通常是这样)向一个角落但错过了一个角落),然后也将其包裹起来。

两个点在左上方向移动的例子:

+------+    +------+    +------+    +------+
|      |    |*o    |    |      |    |      |
| *o   |    |      |    |      |    |      |
|      | -> |      | -> |      | -> |    *o|
|      |    |      |    |o    *|    |      |
+------+    +------+    +------+    +------+

当然,您不必担心第三张图片中的点似乎是分离的。你的两边都被包裹起来了,所以这些点仍然在相邻的单元格中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多