首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:如何计算单元格之间的距离?

Python:如何计算单元格之间的距离?
EN

Stack Overflow用户
提问于 2019-03-28 18:50:14
回答 5查看 506关注 0票数 0

假设我想要计算一个正方形网格5x5中的单元格之间的距离。两个单元格之间的距离是100m

网格的每个像元的编号都在024之间

代码语言:javascript
复制
0   1  2  3  4
5   6  7  8  9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24 

例如:

代码语言:javascript
复制
distance between cell 0 and 3 is 300
distance between cell 2 and 7 is 100
distance between cell 11 and 19 is 400

我必须将单元格的xy位置之间的距离计算为不同。

代码语言:javascript
复制
gs = 5 ## Cells per side
S = gs*gs ## Grid Size
r0 = 100 ## distance between two cells

for i in range(0, S):
    for j in range(0, S):
        if i == j: continue
        x = int(floor(i/gs))
        y = int(floor(j/gs))
        dist = x*r0 + abs(j-i)*r0

但这不是正确的解决方案

EN

回答 5

Stack Overflow用户

发布于 2019-03-28 18:57:46

代码语言:javascript
复制
# n1, n2 = cell numbers
cellsize = 100.0
x1,x2 = n1%gs, n2%gs
y1,y2 = n1//gs, n2//gs
dist = sqrt( float(x1-x2)**2 + float(y1-y2)**2)  # pythagoras theorem
dist *= cellsize
票数 1
EN

Stack Overflow用户

发布于 2019-03-28 18:59:36

您应该考虑坐标,而不是单元格编号

代码语言:javascript
复制
gs = 5 ## Cells per side
S = gs*gs ## Grid Size
r0 = 100 ## distance between two cells

for i in range(0, S):
    for j in range(0, S):
        if i == j: continue
           xi = int(i/gs)
           yi = i % gs
           xj = int(j/gs)
           yj = j % gs
           dist = r0 * (abs(xi-xj) + abs(yi-yj))
票数 0
EN

Stack Overflow用户

发布于 2019-03-28 18:59:55

这是实现这一点的一种方法:

代码语言:javascript
复制
r = 100

grid = ((0,   1,  2,  3,  4),
        (5,   6,  7,  8,  9),
        (10, 11, 12, 13, 14),
        (15, 16, 17, 18, 19),
        (20, 21, 22, 23, 24))

def coord(n):
    for x, line in enumerate(grid):
        if n not in line:
            continue
        y = line.index(n)
        return x, y

def dist(n, m):
        xn, yn = coord(n)
        xm, ym = coord(m)
        return r * (abs(xn - xm) + abs(yn - ym))

print(dist(0, 3))  # 300
print(dist(2, 7))  # 100
print(dist(11, 19)) # 400

这个想法是先得到你的数字的坐标,然后再计算“距离”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55395721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档