摘要:數據問題解壓縮結果計算高主要運行結果列表容差計算通過的內容算法點列表第一個點最后一個點容差軌跡結果原始圖壓縮圖
數據
P0,107.605,137.329 P1,122.274,169.126 P2,132.559,179.311 P3,153.324,184.276 P4,171.884,174.654 P5,186.408,168.634 P6,196.566,145.204 P7,200.549,127.877 P8,211.391,118.179 P9,216.318,116.547 P10,225.197,122.796 P11,231.064,135.459 P12,240.835,143.398 P13,254.630,144.933 P14,265.055,158.761 P15,271.004,159.660 P16,274.474,173.979問題
import math # 壓縮結果 Compressed = list() class Point(object): def __init__(self, id, x, y): self.id = id self.x = x self.y = y def read_m(path): m = [] with open(path, "r") as f: for i in f.readlines(): aa = i.replace(" ", "").split(",") p = Point(aa[0], eval(aa[1]), eval(aa[2])) m.append(p) return m def calc_height(point1, point2, point): """ 計算高 :param point1: Point :param point2: Point :param point: Point :return: """ area = abs(0.5 * (point1.x * point2.y + point2.x * point.y + point.x * point1.y - point2.x * point1.y - point.x * point2.y - point1.x * point.y)) bottom = math.sqrt( math.pow(point1.x - point2.x, 2) + math.pow(point1.y - point2.y, 2) ) height = area / bottom * 2 return height def DPmain(pointList, tolerance): """ 主要運行結果 :param pointList: Point 列表 :param tolerance: 容差 :return: """ if pointList == None or pointList.__len__() < 3: return pointList firspoint = 0 lastPoint = len(pointList) - 1 Compressed.append(pointList[firspoint]) Compressed.append(pointList[lastPoint]) while (pointList[firspoint] == pointList[lastPoint]): lastPoint -= 1 DouglasPeucker(pointList, firspoint, lastPoint, tolerance) def DouglasPeucker(pointList, firsPoint, lastPoint, tolerance): """ 計算通過的內容 DP算法 :param pointList: 點列表 :param firsPoint: 第一個點 :param lastPoint: 最后一個點 :param tolerance: 容差 :return: """ maxDistance = 0.0 indexFarthest = 0 for i in range(firsPoint, lastPoint): distance = calc_height(pointList[firsPoint], pointList[lastPoint], pointList[i]) if (distance > maxDistance): maxDistance = distance indexFarthest = i if maxDistance > tolerance and indexFarthest != 0: Compressed.append(pointList[indexFarthest]) DouglasPeucker(pointList, firsPoint, indexFarthest, tolerance) DouglasPeucker(pointList, indexFarthest, lastPoint, tolerance) if __name__ == "__main__": a = read_m("軌跡.txt") print(a.__len__()) # for item in a: # print(item.id, item.x, item.y) DPmain(a, 8) for i in Compressed: print("{},{},{}".format(i.id, i.x, i.y))結果
P0,107.605,137.329 P16,274.474,173.979 P9,216.318,116.547 P3,153.324,184.276 P1,122.274,169.126 P5,186.408,168.634 P7,200.549,127.877
原始圖
壓縮圖
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44818.html
摘要:算法的學習是枯燥無味的,如何快速理解和提高學習的樂趣理解復雜數據結構的最佳方法是看到它們的實際運行。廢話不多說了,直接上網址了主頁算法算法列表希望對愛好算法的你有幫助謝謝。 算法的學習是枯燥無味的,如何快速理解和提高學習的樂趣?理解復雜數據結構的最佳方法是看到它們的實際運行。 今天給大家推薦一個網址、它已經為各種數據結構和算法開發了交互式動畫,這樣有助于我們更直觀的去理解和學習各種數據...
摘要:嚴肅的開場白故事要從深度學習說起。本文從視頻分類的角度,對深度學習在該方向上的算法進行總結。數據集熟悉深度學習的朋友們應該清楚,深度學習是一門數據驅動的技術,因此數據集對于算法的研究起著非常重要的作用。是一個比較成功的傳統方法與深度學習算 showImg(https://segmentfault.com/img/bV7hQP?w=900&h=330); 不嚴肅的開場白 視頻社交已經成為...
閱讀 3200·2021-09-06 15:02
閱讀 2247·2019-08-30 15:48
閱讀 3443·2019-08-29 11:08
閱讀 3285·2019-08-26 13:55
閱讀 2444·2019-08-26 13:35
閱讀 3165·2019-08-26 12:11
閱讀 2601·2019-08-26 11:48
閱讀 888·2019-08-26 11:42