如何使用只有索引的笛卡尔坐标系找到坐标?

时间:2011-04-05 03:07:06

标签: python math

如何使用只有索引的笛卡尔坐标系找到坐标?

  • 例如,4点到1,2点和9点到1,3点。
  • 假设这些块将始终环绕1,1。

我没有按照网格的顺序结婚,但是如果可能的话,我想通过索引而不是加冕来调用该位置。

我正在尝试为游戏切片创建一个网格。

enter image description here

4 个答案:

答案 0 :(得分:3)

假设坐标为:

  • 纯整数
  • 有限,比如说'N'维。

然后

 (x,y) -> x + N*y
   n -> (x,y) = (n%N,  n/N)

另请参阅:this wikipedia picture了解处理非有限范围的方法。 这是一个Excel图像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

如果需要环绕,请使用模数。