我是个编码新手,我想检查一个点是否在最后画的线上(在pygame中)。
我有两个列表,两个列表中都有刚刚绘制的线段的坐标(以30pix为单位),一个是最后绘制的点。
current_line = []
dot_pos = []
距离函数是我在网上找到的。
def dist_point_to_line(line1, line2, point):
x0 = point[0]
y0 = point[1]
x1 = line1[0]
y1 = line1[1]
x2 = line2[0]
y2 = line2[1]
px = x2-x1
py = y2-y1
norm = px*px + py*py
u = ((x0 - x1) * px + (y0 - y1) * py) / float(norm)
if u > 1:
u = 1
elif u < 0:
u = 0
x = x1 + u * px
y = y1 + u * py
dx = x - x0
dy = y - y0
dist = sqrt(dx*dx + dy*dy)
return dist
现在我想在每条线段实现检查,但我卡住了。有什么建议吗?
这是我想到的,虽然不想用。
def distance_check():
for i in range(len(current_line)-1):
if dist_point_to_line(current_line[i], current_line[i+1], dot_pos) < 10:
return True #dot allowed to be placed
return False
如果 dot_pos
是一个列表,那么你必须得到列表的最后一个元素(dot_pos[-1]
). 注意函数的参数 dist_point_to_line
是单点,而不是点的列表。
def distance_check():
for i in range(len(current_line)-1):
if dist_point_to_line(current_line[i], current_line[i+1], dot_pos[-1]) < 10:
return True #dot allowed to be placed
return False