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

Python 如何使用只有索引的笛卡尔坐标系查找坐标?,python,math,Python,Math,如何使用只有索引的笛卡尔坐标系查找坐标 例如,4分对1,2,9分对1,3 假设块始终围绕1,1 我不同意网格的顺序,但如果可能的话,我想通过索引而不是冠来调用位置 我正在尝试为游戏瓷砖创建网格 假设坐标为: 纯整数 有限的,比如说在一个尺寸为“N”的正方形中 然后 另请参见:了解处理非有限范围的方法。 这是一个Excel图像。Excel是一个很好的计算原型工具。您可以一眼看到计算的每个步骤 显然,您可以很容易地将其映射到代码中;它处理无限四分之一网格的情况。假设坐标为: 纯整数 有限的

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

  • 例如,4分对1,2,9分对1,3
  • 假设块始终围绕1,1
我不同意网格的顺序,但如果可能的话,我想通过索引而不是冠来调用位置

我正在尝试为游戏瓷砖创建网格


假设坐标为:

  • 纯整数
  • 有限的,比如说在一个尺寸为“N”的正方形中
然后

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


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

假设坐标为:

  • 纯整数
  • 有限的,比如说在一个尺寸为“N”的正方形中
然后

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


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

在这里做一些假设,但您可以将其作为线性方程进行求解:

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

如果你需要换位思考,使用一个模数。

在这里做一些假设,但你可以将其作为线性方程求解:

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

如果你需要环绕,使用一个模数。

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

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

你想要的是a,其中(x,y)映射到某个整数N,反之亦然(函数是一对一的)。Keith的第一个答案(对于有限范围)很接近,但需要知道正方形的最大大小,实际上是在配对函数中添加了另一个参数。他的Excel屏幕截图(无限范围)显示了它是如何完成的,但我想补充一些解释

给定要映射到坐标(x,y)的值N:

首先,我们定位它所属的层。一个图层是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
给定层,找到对应于对角线的整数(上面用a'表示,层1、2、3、4的值为1、3、7、13;列H

现在有了对角线,我们可以找到x和y的值(基思的列I和J):

if(N<对角线):
x=层
y=N-((第1层)^2)+1
elif(N=对角线):
x=层
y=层
其他:
x=(层^2)-N+1
y=层

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

你喜欢的是所谓的a,其中(x,y)映射到某个整数N,反之亦然(函数是一对一和一对上的)。Keith的第一个答案(对于有限范围)很接近,但需要知道正方形的最大大小,实际上是在配对函数中添加了另一个参数。他的Excel屏幕截图(无限范围)显示了它是如何完成的,但我想补充一些解释

给定要映射到坐标(x,y)的值N:

首先,我们定位它所属的层。一个图层是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
给定层,找到对应于对角线的整数(上面用a'表示,层1、2、3、4的值为1、3、7、13;列H

现在有了对角线,我们可以找到x和y的值(基思的列I和J):

if(N<对角线):
x=层
y=N-((第1层)^2)+1
elif(N=对角线):
x=层
y=层
其他:
x=(层^2)-N+1
y=层

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

“只有一个索引”是什么?这是家庭作业吗?我想你需要澄清索引是如何映射到坐标的。例如,使用你给出的两个例子,坐标可能是
(1,sqrt(index))
——但我怀疑这是真的。哦,这听起来像是个家庭作业问题。你最好给出完整的问题,你到目前为止尝试过的,以及一个或多个具体的问题,而不是试图让别人为你做所有的事情。这不是一个家庭作业问题,但如果你知道我在哪里可以读到这方面的内容,我希望有这样的参考。“只有一个索引”指向什么?这是家庭作业吗?我想你需要澄清索引是如何映射到坐标的。例如,使用你给出的两个例子,坐标可能是
(1,sqrt(index))
——但我怀疑这是真的。哦,这听起来像是个家庭作业问题。你最好给出完整的问题,到目前为止你已经尝试了什么,以及