gpt4 book ai didi

java - 计算笛卡尔(二维)坐标系的数字索引

转载 作者:行者123 更新时间:2023-12-01 07:56:28 25 4
gpt4 key购买 nike

给定一个笛卡尔(二维)坐标系,如下所示:

kartesian coordinate system

是否可以(如果可以,如何)为每个字段计算唯一的、可排序的索引?这意味着,使用 x 和 y 坐标,我想计算从左到右、自上而下升序的索引号。例如:

unique numeric indexes

(仅)必须满足以下条件:

  • 索引号必须是唯一的(即使对于较大的系统也是如此)
  • 数字必须从左到右、从上到下升序(但不一定是连续的)
  • 必须是完整的正整数值
  • 必须可以用 Java 实现

我发现了什么:加法、乘法和幂(例如 x*y 或 x^y)不起作用,因为不同的字段具有相同的索引。

方法主体可能如下所示:

public Integer getIndex(Integer xCoordinate, Integer yCoordinate) {
// ...
}

顺便说一句:坐标始终为正 (0 <= x < n)

感谢您的建议。

解决方案:

我在没有计算指数的情况下解决了这个问题,并使用了 Teepeemm 提出的简单可比方法(见评论)

最佳答案

根据您的示例,显而易见的答案是使用:

index = (#cols * row + col)

但这依赖于提前知道列数,并且它足够小以至于不会溢出。

另一种方法是沿对角线索引:

index = ((row + col) * (row + col + 1))/2 + row

所以你的索引看起来像这样:

  0   2   5   9
1 4 8 13
3 7 12 18
6 11 17 24
<小时/>

顺便说一句,因为您正在做算术,所以最好使用原始 int 而不是盒装 Integer 以避免创建不必要的 Integer对象(Effective Java 第二版第 5 项)。

关于java - 计算笛卡尔(二维)坐标系的数字索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29429334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com