簡體   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