Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在网格上查找与直线相交的单元?_Python_Algorithm_Numpy - Fatal编程技术网

Python 如何在网格上查找与直线相交的单元?

Python 如何在网格上查找与直线相交的单元?,python,algorithm,numpy,Python,Algorithm,Numpy,从离散化位置的网格开始,给定线段的起点和终点,如何在网格上查找与该线段相交的单元 例如: 将numpy导入为np xd=np.arange(0,20,1) yd=np.arange(0,10,1) 网格=np.full((len(xd),len(yd)),False) 将某些网格单元格设置为真(网格) x_开始=2.7 x_end=4.9 y_开始=1.5 y_端=5.7 #这里我想检查一下这两条直线 #端点与网格上任何值为True的单元相交 我希望它以一种系统的方式工作,独立于任何起点或终点

从离散化位置的网格开始,给定线段的起点和终点,如何在网格上查找与该线段相交的单元

例如:

将numpy导入为np
xd=np.arange(0,20,1)
yd=np.arange(0,10,1)
网格=np.full((len(xd),len(yd)),False)
将某些网格单元格设置为真(网格)
x_开始=2.7
x_end=4.9
y_开始=1.5
y_端=5.7
#这里我想检查一下这两条直线
#端点与网格上任何值为True的单元相交

我希望它以一种系统的方式工作,独立于任何起点或终点,独立于网格分辨率

这是我对你问题的回答

请查看评论的解释

注意:它假定栅格在y方向上的9处结束

将numpy导入为np
xd=np.arange(0,20,1)
yd=np.arange(0,10,1)
grid=np.random.choice([True,False],(len(xd),len(yd)))
x_开始=2.7
x_end=4.9
y_开始=1.5
y_端=5.7
##求线方程
m=(y_结束-y_开始)/(x_结束-x_开始)
c=y_开始-m*x_开始
##在网格的所有起始x处查找线的y值
y_线=m*xd+c
##查找网格每个起点处线条交叉的单元格的y索引
插入\u ind=yd.searchsorted(y\u行)
##查找线相交处栅格的x和y索引

x_index,y_index=zip(*(i,ind)表示枚举(insert_ind)中的i,ind如果(ind>0和ind有专门的算法用于检索两点之间的所有单元格:
Woo和Amanatides网格遍历算法

图中显示了触摸的单元格:


请提供一个请提供一个示例发布一个带有初始化网格和两点的代码。然后我们可以帮助您。@Pitto我编辑了我的问题。很抱歉一开始不够清楚。有许多图形算法可以解决单元格相交问题。如果您遇到问题,请开始并重新发布。我想可能会be
xd
可以从地板(x_起点)到天花板(x_终点)`in
y_line=m*xd+c
这条线。ya如果您只想检查该线段的交点,这可能是用户想要的。此代码检查起点和终点表示的线的交点。ya可能是