繁体   English   中英

计算点之间的总距离

[英]Calculating total distance between points

我写了这个 function 找到两点之间的距离。 现在我的下一个任务是编写一个 function,它接受一个点列表,这些点是元组,并通过使用距离 function 计算总距离来找到每对点的距离,我被卡住了我不知道如何 go关于它有什么帮助吗? 这是第一个 function:

def distance(point1, point2):
    dist = math.sqrt((point2[0] - point1[0])** 2 + (point2[1] - point1[1])** 2) 
    return dist

假设您有一个偶数列表和您要计算的每一对:

list_points = [(2,1),(50,1), (30,1), (30,5)]
for i in range(0,len(list_points),2):
    pair = list_points[i:i+2]
    dist(pair[0], pair[1])

range 中的第三个参数是一种批处理方式。 那么如果你想让它成为 function:

def compute_distance(list_points):
    """compute distance of points give a list of tuples"""
    computed_list = []
    for i in range(0,len(list_points),2):
        pair = list_points[i:i+2]
        computed_list.append(dist(pair[0], pair[1]))
    return computed_list

尝试这个。

import math

def calc_total_distance(point_list):
    total_dist = 0
    for i in range(len(point_list)-1):
        dist = math.sqrt((point_list[i][0] - point_list[i+1][0])** 2 + (point_list[i][1] - point_list[i+1][1])** 2)
        total_dist += dist
    return(total_dist)

point_list = [(1,2), (2,2), (2,10)]
print(calc_total_distance(point_list))

据我了解,您的距离 function 以两个元组作为参数。 因此,对于新的 function,您将有一个包含此类嵌套元组的列表:

list_points = [((2, 1), (50, 1)), ((30, 1), (30, 5))]

请注意,每个元组包含两个元组。

如果是这种情况,下面是我将如何编写新的 function:

    def total_distance(list_distances):
        result = [distance(i[0], i[1]) for i in list_distances]
        return sum(result)

这里的第二行使用列表理解循环遍历列表和 map 项目到你的距离 function。返回所有获得的距离之和

您需要对每对点之间的距离sum() 获得配对的一种好方法是使用生成器 function ,如下所示的名为 pairwise pairwise()的生成器。 关于计算两点之间的距离,您也在重新发明轮子 — 因为有一个math.hypot() function。

下面的代码显示了一起使用它们来做你想做的事情:

import math

def pairwise(iterable):
    """s -> (s0,s1), (s1,s2), (s2, s3), ..."""
    a, b = iter(iterable), iter(iterable)
    next(b, None)
    return zip(a, b)

def distance(point1, point2):
    return math.hypot(point2[0]-point1[0], point2[1]-point1[1])


if __name__ == '__main__':
    points = [(1,2), (2,2), (2,10)]
    print(f'total distance:', sum(distance(a, b) for a,b in pairwise(points)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM