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 樣例輸出 資料範圍與規定 對於...