我想在C++中實現Ramer–Douglas–Peucker_algorithm。幫助理解該算法
僞代碼如下所示:
function DouglasPeucker(PointList[], epsilon)
//Find the point with the maximum distance
dmax = 0
index = 0
for i = 2 to (length(PointList) - 1)
d = OrthogonalDistance(PointList[i], Line(PointList[1], PointList[end]))
if d > dmax
index = i
dmax = d
end
end
//If max distance is greater than epsilon, recursively simplify
if dmax >= epsilon
//Recursive call
recResults1[] = DouglasPeucker(PointList[1...index], epsilon)
recResults2[] = DouglasPeucker(PointList[index...end], epsilon)
// Build the result list
ResultList[] = {recResults1[1...end-1] recResults2[1...end]}
else
ResultList[] = {PointList[1], PointList[end]}
end
//Return the result
return ResultList[]
end
這是我的理解爲止。 這是一個遞歸函數,它考慮了一系列點和距離閾值。
然後它遍歷當前點找到最大距離的點。
我有點遺失了正交距離函數。我如何計算這個?我從來沒有見過以線段作爲參數的距離函數。
我想除此之外,我應該沒問題,我只會使用std :: vectors作爲數組。我想我會使用std :: copy,然後根據算法說的推或者彈出。
由於
那麼,是不是OrthogonalDistance應該計算一個點與線的正交距離?當然一條線包含2點。你可以用一些基本的三角函數來計算它。 – futureelite7 2010-08-16 17:20:32