【測繪程式設計試題集】 試題06 軌跡資料壓縮演算法
資料
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('\n', '').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
原始圖
壓縮圖
相關文章
- 【測繪程式設計試題集】 試題01 計程車軌跡資料計算程式設計
- 【測繪程式設計試題集】 試題04 最短路徑計算程式設計
- 【測繪程式設計試題集】 試題02 矩陣卷積計算程式設計矩陣卷積
- 【測繪程式設計試題集】 試題09 反距離加權插值程式設計
- 【測繪程式設計試題集】 試題03 利用線性迴歸模型進行衛星軌道的預報程式設計模型
- 程式設計師進階之路之面試題與筆試題集錦(三)線上程式設計題程式設計師面試題筆試
- 程式設計師進階之路之面試題與筆試題集錦(一)程式設計師面試題筆試
- 【程式設計測試題】阿里巴巴2019年提前批程式設計題程式設計阿里
- 【程式設計測試題】頭條校招程式設計
- 大資料面試題整理-好程式設計師大資料面試題程式設計師
- 雲端計算大資料面試題,雲端計算大資料面試題集錦大資料面試題
- MYSQL壓縮表測試MySql
- 軌跡資料 (三)
- 新書出版 |《資料庫程式設計師面試筆試真題庫》新書資料庫程式設計師面試筆試
- 【程式設計測試題】遊戲任務標記程式設計遊戲
- 【程式設計測試題】素數對、不要二、求和程式設計
- 新書出版 |《資料庫程式設計師面試筆試真題與解析》新書資料庫程式設計師面試筆試
- 面試題:web程式設計技術考試題庫(含答案)面試題Web程式設計
- 測試標題測試標題
- MySQL - [06] 海賊王測試資料MySql
- 2020年低壓電工考試題及低壓電工考試資料
- 騰訊招聘Python程式設計師面試題目:Python資料結構與演算法Python程式設計師面試題資料結構演算法
- 軌跡聯邦用到的具體公式 + 軌跡模組的設計公式
- 如何繪製完美的滑鼠軌跡
- ACCPS2-03使用java實現資料庫程式設計考試試題參照Java資料庫程式設計
- 演算法題-測試用例執行計劃演算法
- Linux下各壓縮方式測試(壓縮率和使用時間)Linux
- 2021-08-21-C站初級考試C1-模擬試卷程式設計題解析-06程式設計
- 程式設計師程式碼面試指南:IT名企演算法與資料結構題目最優解程式設計師面試演算法資料結構
- 測試面試題集錦(五)| 自動化測試與效能測試篇(附答案)面試題
- 面試測試題面試
- 測試面試題面試題
- 好程式設計師Java教程分享Java實習生面試題集錦程式設計師Java面試題
- 程式設計師50+Java面試題程式設計師Java面試題
- 智力題(程式設計師面試經典)程式設計師面試
- Java程式設計師面試題及解答Java程式設計師面試題
- JAVA程式設計師面試題庫分享Java程式設計師面試題
- 測試題