Python 3.x 网格上节点的相互可见性

Python 3.x 网格上节点的相互可见性,python-3.x,graph,grid,Python 3.x,Graph,Grid,我有一个简单的网格,我需要检查两个节点的相互可见性。所有墙和节点的坐标都是已知的。我需要检查两个节点的相互可见性 我尝试使用向量,但没有得到可接受的结果。这个算法是可行的,但它不适合我的程序,因此我必须对数据进行转换才能得到可接受的结果 我使用以下代码检查节点的相互可见性: def查找向量网格(开始,目标): 距离=[开始[0]-目标[0],开始[1]-目标[1]] norm=math.sqrt(距离[0]**2+距离[1]**2) 如果norm==0:返回[1,1] 方向=[(距离[0]/no

我有一个简单的网格,我需要检查两个节点的相互可见性。所有墙和节点的坐标都是已知的。我需要检查两个节点的相互可见性

我尝试使用向量,但没有得到可接受的结果。这个算法是可行的,但它不适合我的程序,因此我必须对数据进行转换才能得到可接受的结果

我使用以下代码检查节点的相互可见性:

def查找向量网格(开始,目标):
距离=[开始[0]-目标[0],开始[1]-目标[1]]
norm=math.sqrt(距离[0]**2+距离[1]**2)
如果norm==0:返回[1,1]
方向=[(距离[0]/norm),(距离[1]/norm)]
返回方向
def查找向量路径(开始、目标):
路径=[开始]
方向=查找向量网格((开始[0]*单元格宽度,开始[1]*单元格高度),
(目标[0]*单元格宽度,目标[1]*单元格高度)
x、 y=开始[0]*单元格宽度,开始[1]*单元格高度
点=开始
尽管如此:
如果点不在路径和地图中(点):
path.append(点)
elif不在地图中(点):
打破
x-=方向[0]
y-=方向[1]
点=(x//单元宽度,y//单元高度)
返回路径
def矢量_障碍物_清洁(路径、障碍物):
结果=[]
对于路径中的节点:
如果节点处于障碍物中:
result.append(节点)
打破
result.append(节点)
返回结果
例如:

path=查找向量路径((0,0)、(0,5))
路径=向量(路径[(0,3)])
  • in_地图-检查点是否不在国外地图边界
  • 开始,目标-元组宽度x和y坐标
  • cell_width,cell_height-int变量,节点宽度和高度以像素为单位(我使用pygame作为可视化图形)

  • 我对这个方法没有任何问题,但它不适用于图形,它“自行”工作,它不是我需要的那样。我的英语不好,请原谅:)

    你发布的代码看起来非常好, 你的问题并没有说明什么需要改进

    而不是对向量进行FP运算, 您可能更喜欢递增整数X或Y指针 一次一个像素。 考虑使用, 它枚举视线中的像素 在
    开始
    目标
    之间。 关键的观察结果是,对于给定的坡度 它注意到X或Y的增量是否更快,
    并在该索引上循环

    谢谢,你不明白我的问题,但请回答。该算法通过节点坐标直接工作,无需变换。正是我需要的。我没有听说过这种方法。