如何使用只有索引的笛卡尔坐标系找到坐标?
我没有按照网格的顺序结婚,但是如果可能的话,我想通过索引而不是加冕来调用该位置。
我正在尝试为游戏切片创建一个网格。
答案 0 :(得分:3)
假设坐标为:
然后
(x,y) -> x + N*y
n -> (x,y) = (n%N, n/N)
另请参阅:this wikipedia picture了解处理非有限范围的方法。 这是一个Excel图像。 Excel是用于原型计算的非常好的工具。你可以一目了然地看到计算的每一步。
显然,您可以非常轻松地将其映射到代码中;它处理无限四分之一格的情况。
答案 1 :(得分:1)
你所追求的是所谓的pairing function,其中(x,y)映射到某个整数 N ,反之亦然(该功能是一对一的)。 Keith的第一个答案(对于有限范围)很接近,但要求您知道方形的最大尺寸,实际上为配对功能添加了另一个参数。他在Excel中的截图(无限范围)显示了它是如何完成的,但我想为它添加一些解释。
给定一个值 N ,你要映射到一个坐标(x,y):
首先,我们找到它所属的 图层 。一个层是Keith在他的 Excel专栏D 中展示的,并且是这样的:
1 2 5 10 -> '1 2 3 4
4 3 6 11 -> 2 '2 3 4
9 8 7 12 -> 3 3 '3 4
16 15 14 13 -> 4 4 4 '4
您可以通过
找出 N 所属的图层layer = math.floor(math.sqrt(N - 1)) + 1
给定图层,找到对应于 对角线 的整数(如上图所示',对于图层1,2,值为1,3,7,1, 3,4, H H 在Keith的回答中)
diagonal = (layer^2) - layer + 1
现在你有了对角线,我们可以找到 x 和 y 的值(Keith的列I和J ):
if (N < diagonal):
x = layer
y = N - ((layer-1)^2) + 1
elif (N == diagonal):
x = layer
y = layer
else:
x = (layer^2) - N + 1
y = layer
我的公式与基思的公式略有不同,但它们最终来自同一个地方。我独立完成了计算,然后将它们与基思相比较,发现它们几乎相同。
答案 2 :(得分:0)
也许我读的内容太少了,但是元组字典出了什么问题,其中键是索引,而元组包含坐标。
答案 3 :(得分:-1)
在这里做一些假设,但你可以将它们解释为线性方程式:
9 = 1x + 3y
4 = 1x + 2y
-----------
5 = 0x + 1y
-> 5 = y
-> -6 = x, by plugging y back into one of the two linear equations
现在您拥有(x, y)
,您可以将任何坐标对(x', y')
转换为索引:
newIndex = -6x' + 5y
如果需要环绕,请使用模数。