点到两线段的距离

问题描述 投票:0回答:1

我是个编码新手,我想检查一个点是否在最后画的线上(在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
pygame line distance dot check
1个回答
0
投票

如果 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
© www.soinside.com 2019 - 2024. All rights reserved.