首页 > 解决方案 > 在保留的中心框周围以圆形图案将网格框分配给用户

问题描述

我正在尝试找出一种解决方案/可扩展的公式/方法来将 2D 网格的框分配给用户。

所以让我们假设我使用的是无限网格。但是有一个中心点 (0, 0) 将是它的坐标。永远不会分配此框。

我需要从该框外的一个点开始,例如 (0, 1),以便为第一个用户分配网格上的一个框。然后它将为下一个用户移动到 (1, 1),为下一个用户移动到 (1, 0),依此类推。

然后,一旦原点周围的所有框都被占用,移动到下一个“层”,例如 [(2, 2), (2, 1), (2, 0)]。

抱歉,如果以前有人问过这个问题,我不知道你会怎么称呼它。

另外:我正在存储分配了多少个盒子以及类似的信息。

网格可视化

标签: javamathformula

解决方案


最有效和简洁的方法是预先将给定层的所有坐标生成到一个列表中。这样它就变成了一个简单的数字对排列算法。

这是一种方法,它将为给定n的 from和排除 pair生成对的所有排列。我正在使用Apache 公共库中的类-nn[0,0]Pair

public List<Pair<Integer, Integer>> generateAllPerm(int n) {
    return IntStream.rangeClosed(Math.abs(n)*-1, Math.abs(n))
        .mapToObj(i -> IntStream.rangeClosed(Math.abs(n)*-1, Math.abs(n))
            .filter(j -> i != 0 || j != 0)
            .mapToObj(j -> new ImmutablePair<Integer, Integer>(i, j))
            .collect(Collectors.toList())
        ).flatMap(List::stream)
        .collect(Collectors.toList());

推荐阅读