摘要:数据问题解压缩结果计算高主要运行结果列表容差计算通过的内容算法点列表第一个点最后一个点容差轨迹结果原始图压缩图
数据
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
原始图
压缩图
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/44818.html
摘要:算法的学习是枯燥无味的,如何快速理解和提高学习的乐趣理解复杂数据结构的最佳方法是看到它们的实际运行。废话不多说了,直接上网址了主页算法算法列表希望对爱好算法的你有帮助谢谢。 算法的学习是枯燥无味的,如何快速理解和提高学习的乐趣?理解复杂数据结构的最佳方法是看到它们的实际运行。 今天给大家推荐一个网址、它已经为各种数据结构和算法开发了交互式动画,这样有助于我们更直观的去理解和学习各种数据...
摘要:严肃的开场白故事要从深度学习说起。本文从视频分类的角度,对深度学习在该方向上的算法进行总结。数据集熟悉深度学习的朋友们应该清楚,深度学习是一门数据驱动的技术,因此数据集对于算法的研究起着非常重要的作用。是一个比较成功的传统方法与深度学习算 showImg(https://segmentfault.com/img/bV7hQP?w=900&h=330); 不严肃的开场白 视频社交已经成为...
阅读 3178·2021-09-06 15:02
阅读 2226·2019-08-30 15:48
阅读 3422·2019-08-29 11:08
阅读 3264·2019-08-26 13:55
阅读 2423·2019-08-26 13:35
阅读 3138·2019-08-26 12:11
阅读 2581·2019-08-26 11:48
阅读 860·2019-08-26 11:42