查找地图上一条线下方的所有点
Find all points below a line on a map
为了在有很多点(将近两千)的地图上绘制两点之间的路径,我使用了以下函数:
def path_between_cities(self, cities_with_coordinates, from_to):
from matplotlib.lines import Line2D
# coordinates from chosen path
x = [int(from_to[0][2]), int(from_to[1][2])]
y = [int(from_to[0][1]), int(from_to[1][1])]
#create line
line = Line2D(x,y,linestyle='-',color='k')
# create axis
x_ = np.array((0,2000))
y_ = np.array((0,6000))
plt.plot(x_,y_, 'o')
for item in cities_with_coordinates:
name = item[0]
y_coord = int(item[1])
x_coord = int(item[2])
plt.plot([x_coord], [y_coord], marker='o', markersize=1, color='blue')
plt.axes().add_line(line)
plt.axis('scaled')
plt.show()
我的目标是提取绘制线下方的所有点(坐标)。
我知道您可以使用 cross product of vectors
给定大量向量,在上述上下文中实现此目标的最有效方法是什么?
每次叉积运算仍然是O(1)
。您可以 运行 所有点的以下函数,并查看其中哪些点在下方,从而对其进行线性时间检查。
def ccw(a,b,c):
""" Returns 1 if c is above directed line ab else returns -1"""
return (b.x - a.x) * (c.y - a.y) - (c.x - a.x) * (b.y - a.y)
#a and b are the vertices and c is the test point.
除非您有关于这些点的一些其他信息,否则您必须检查每个点以查看它是否低于特定的线。
为了在有很多点(将近两千)的地图上绘制两点之间的路径,我使用了以下函数:
def path_between_cities(self, cities_with_coordinates, from_to):
from matplotlib.lines import Line2D
# coordinates from chosen path
x = [int(from_to[0][2]), int(from_to[1][2])]
y = [int(from_to[0][1]), int(from_to[1][1])]
#create line
line = Line2D(x,y,linestyle='-',color='k')
# create axis
x_ = np.array((0,2000))
y_ = np.array((0,6000))
plt.plot(x_,y_, 'o')
for item in cities_with_coordinates:
name = item[0]
y_coord = int(item[1])
x_coord = int(item[2])
plt.plot([x_coord], [y_coord], marker='o', markersize=1, color='blue')
plt.axes().add_line(line)
plt.axis('scaled')
plt.show()
我的目标是提取绘制线下方的所有点(坐标)。
我知道您可以使用 cross product of vectors
给定大量向量,在上述上下文中实现此目标的最有效方法是什么?
每次叉积运算仍然是O(1)
。您可以 运行 所有点的以下函数,并查看其中哪些点在下方,从而对其进行线性时间检查。
def ccw(a,b,c):
""" Returns 1 if c is above directed line ab else returns -1"""
return (b.x - a.x) * (c.y - a.y) - (c.x - a.x) * (b.y - a.y)
#a and b are the vertices and c is the test point.
除非您有关于这些点的一些其他信息,否则您必须检查每个点以查看它是否低于特定的线。