Douglas Peucker演算法 抽稀曲線上的點

2021-07-24 04:02:14 字數 2019 閱讀 9693

douglas-peucker演算法

在數位化過程中,需要對曲線進行取樣簡化,即在曲線上取有限個點,將其變為折線,並且能夠在一定程度

上保持原有的形狀。

經典的douglas-peucker演算法描述如下:

(1)在曲線首尾兩點a,b之間連線一條直線ab,該直線為曲線的弦;

(2)得到曲線上離該直線段距離最大的點c,計算其與ab的距離d;

(3)比較該距離與預先給定的閾值threshold的大小,如果小於threshold,則該直線段作為曲線的近似,該段曲線處理完畢。

(4)如果距離大於閾值,則用c將曲線分為兩段ac和bc,並分別對兩段取信進行1~3的處理。

(5)當所有曲線都處理完畢時,依次連線各個分割點形成的折線,即可以作為曲線的近似。

douglas-peucker演算法源**:

#include

#include

#include "douglaspeucker.h"

using namespace std;

void readin(vector&points,const char * filename)

}void douglaspeuckeralgorithm(vector&points,int

tolerance,const char*filename)

void dumpout1()

void dumpout2()

int main(int argc, const char *argv)

else

return 0;

}///

///#ifndef douglagpeucker

#include

#include

using namespace std;

struct mypointstruct // 點的結構

;mypointstruct(double x, double y, double z) // 點的建構函式

;~mypointstruct(){};

};class douglaspeucker

;douglaspeucker(vector&points,int tolerance);

~douglaspeucker(){};

void writedata(const char *filename);

private:

void douglaspeuckerreduction(int firstpoint, int lastpoint, double

tolerance);

double perpendiculardistance(mypointstruct &point1, mypointstruct

&point2, mypointstruct &point3);

mypointstruct myconvert(int index);

};#define douglagpeucker

#endif

//////

//#include "douglaspeucker.h"

double douglaspeucker::perpendiculardistance(mypointstruct &point1,

mypointstruct &point2, mypointstruct &point3)

mypointstruct douglaspeucker::myconvert(int index)

void douglaspeucker::douglaspeuckerreduction(int firstpoint, int

lastpoint, double tolerance)

}if (maxdistance > tolerance && indexfarthest != 0)

}douglaspeucker::douglaspeucker(vector&points,int

tolerance)

}void douglaspeucker::writedata(const char *filename)

抽稀 Douglas Peucker演算法

douglas peucker演算法 在數位化過程中,需要對曲線進行取樣簡化,即在曲線上取有限個點,將其變為折線,並且能夠在一定程度 上保持原有的形狀。經典的douglas peucker演算法描述如下 1 在曲線首尾兩點a,b之間連線一條直線ab,該直線為曲線的弦 2 得到曲線上離該直線段距離最大...

KNN,TC text category 基本演算法

knn分類演算法 knn分類演算法是一種傳統的基於統計的模式識別方法。演算法思想很簡單 對於一篇待分類文件,系統在訓練集中找到k個最相近的鄰居,使用這k個鄰居的類別為該文件的候選類別。該文件與k個鄰居之間的相似度按類別分別求和,減去乙個預先得到的截尾閾值,就得到該文件的類別測度。用knn也表示所選k...

日常練習 算

問題背景 zhx幫他妹子做數學題。問題描述 求 如 n 3,m 3,這個值為1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3 56。輸入格式 僅一行,包含兩個數 n和 m.輸出格式 僅一行,包含所求的答案 mod10 9 7的值。樣例輸入 3 3 樣例輸出 資料範圍與規定 對於...