使用从外到中的节点创建网格/网格

时间:2014-07-16 08:38:27

标签: python grid mesh

python的新手如果不清楚则道歉,但我试图构建一个x轴为-4000到4000,y轴为-4000到4000的网格。

我试图将每个轴分成100个节点,但我希望节点1位于(-4000,-4000),即左下角,主要是节点通过网格外部传入,所以我的最终节点将位于网格的正中心。

我试着这样做,因为我正在运行for循环,我需要在读取x和y值时以正确的顺序遍历节点。我以前没有在python上制作网格,所以任何帮助都表示赞赏。

谢谢

1 个答案:

答案 0 :(得分:0)

如果你更关心可读性而不是性能,我建议你首先创建你的方格,然后在#34;螺旋"中进行排序。配置。

考虑您的Node类:

class Node:
    "Node of the grid"
    def __init__(self, x, y):
        self.x = x
        self.y = y

你想为每个轴创建100个节点(第一个是-4000,一个是0,最后是3200):

nodes = []
for x in range(-4000, 4001, 800): # From -4000 to 4000 (included) by 800 increment  
    for y in range(-4000, 4000, 800):
        nodes.append(Node(x,y))

然后根据需要对其进行排序,你需要类似于极坐标的东西,然后按半径然后角度排序(我说类似因为你的节点排列成方形而不是圆形)。此处的半径为max(abs(x),abs(y),而不是正常半径。

排序代码如下所示:

import math
sorted_nodes = []
for node in nodes:
    # We take atan2 to compute the phase but the starting point would not be on bootom left corner
    # So we need to add a constant (0.001 is a small number to make the bottom left corner to have maximum value)
    # We use this trick to still be able in reverse order
    phase = (math.atan2(node.y, node.x) + 3 * math.pi / 4 - 0.001) % (2 * math.pi)
    sorted_nodes.append((max(abs(node.x),abs(node.y)), phase, node))
sorted_nodes = sorted(sorted_nodes, reverse=True) # Sort first by radius, then by the phase

sorted_nodes列表是一个元组,第三个参数是您的节点排序良好的(您可以通过[t[2] for t in sorted_nodes])获取节点列表。

注意:列表顺时针方向