java - 在保留的中心框周围以圆形图案将网格框分配给用户
问题描述
我正在尝试找出一种解决方案/可扩展的公式/方法来将 2D 网格的框分配给用户。
所以让我们假设我使用的是无限网格。但是有一个中心点 (0, 0) 将是它的坐标。永远不会分配此框。
我需要从该框外的一个点开始,例如 (0, 1),以便为第一个用户分配网格上的一个框。然后它将为下一个用户移动到 (1, 1),为下一个用户移动到 (1, 0),依此类推。
然后,一旦原点周围的所有框都被占用,移动到下一个“层”,例如 [(2, 2), (2, 1), (2, 0)]。
抱歉,如果以前有人问过这个问题,我不知道你会怎么称呼它。
另外:我正在存储分配了多少个盒子以及类似的信息。
解决方案
最有效和简洁的方法是预先将给定层的所有坐标生成到一个列表中。这样它就变成了一个简单的数字对排列算法。
这是一种方法,它将为给定n
的 from和排除 pair生成对的所有排列。我正在使用Apache 公共库中的类-n
n
[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());
推荐阅读
- javascript - react-router-dom 参数不包含 URL 中存在的问号
- integer - 为什么在对 3 个实变量求和时会得到一个奇怪的结果?
- .net - 用于集成测试的 Spring Boot @LocalServerPort 的 DotNet 替代品
- react-native - React-native createRef 无法正常工作
- django - 错误当前路径,与其中任何一个都不匹配
- gitlab - 使用 csv 文件中的所有信息生成在两个标签之间合并的所有合并请求的列表
- scala - 当仅更改一个属性时,案例类的两个副本是否使用两倍的内存,或者 Scala 是否在副本上重用不可变值以节省内存?
- image - 导航栏剪切模态中的全宽图像
- c - Windows 中的 --wrap 相当于什么?
- kotlin - Kotlin - 如何从集合中的对象获取属性