我如何找到一个坐标系使用笛卡尔坐标系只是一个索引?

2024-04-25 01:56:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我如何找到一个坐标系使用笛卡尔坐标系只是一个索引?在

  • 例如,4点对1,2,9点对1,3。在
  • 假设这些块总是环绕1,1。在

我不喜欢网格的顺序,但如果可能的话,我想用索引来命名这个位置,而不是冠冕。在

我正在尝试为游戏平铺创建一个网格。在

enter image description here


Tags: 网格游戏顺序命名平铺坐标系冠冕
3条回答

也许我读得太少了,但是一个元组字典有什么问题呢,其中键是索引,元组包含坐标。在

假设坐标为:

  • 纯整数
  • 有限的,比如在一个维数为“N”的正方形中。在

那么

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

另请参阅:this wikipedia picture以了解处理非有限范围的方法。 这是一个Excel图像Excel。Excel是一个很好的计算原型工具。你可以一眼看到计算的每一步。在

显然,您可以很容易地将其映射到代码中;它处理无限四分之一网格的情况。在

您要寻找的是一个pairing function,其中(x,y)映射到某个整数N,反之亦然(函数是一对一的,并且是on)。基思的第一个答案(对于有限范围)很接近,但要求你知道正方形的最大尺寸,实际上是在配对函数中添加了另一个参数。他的Excel截图(无限范围)显示了它是如何完成的,但我想补充一些解释。在

给定要映射到坐标(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

你可以通过

^{pr2}$

给定层,找到对应于对角线的整数(上面用a'表示,第1、2、3、4层的值为1、3、7、13;基思的答案中的H列

diagonal = (layer^2) - layer + 1 

现在有了对角线,我们可以找到xy的值(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

我的公式看起来和基思的有点不同,但它们最终都是从同一个地方推导出来的。我独立地做了计算,然后把它们和基思的做了比较,发现它们几乎完全相同。在

相关问题 更多 >