C++道格拉斯-普克 Douglas-Peuker(DP算法)
2015-11-22 19:10
573 查看
double Distance(int x1,int y1,int x2,int y2) { double distance; distance=(double)sqrt(double(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); return distance; } double NDistance(int x1,int y1,int x2,int y2,int x3,int y3) { double A=y1-y2; double B=x2-x1; int C=-B*y1-A*x1; double ndistance=fabs(float(A*x3+B*y3+C))/sqrt(pow(A,2)+ pow(B,2)); return ndistance; } ///////////////////////////////////////////// //////Douglas一Peukcer算法 void CMyDoc::getNDistance(vector<pair<int, int>>::iterator pVector,vector<pair<int, int>>::iterator pVector1,int limit) { vector<pair<int, int>>::iterator testVector; vector<pair<int, int>>::iterator testVector1; vector<pair<int, int>>::iterator tempVector; tempVector=pVector; if(pVector1==(tempVector++)) return; tempVector=pVector; int MaxNum=0; double MaxDistance=0.0; for(tempVector;tempVector!=pVector1;) { testVector=(tempVector++); double temp; temp=NDistance((*pVector).first,(*pVector).second,(*pVector1).first,(*pVector1).second,(*testVector).first,(*testVector).second); if(MaxDistance<temp) { MaxDistance=temp; testVector1=testVector; } } tempVector=pVector; if(MaxDistance<limit) { for( tempVector++;tempVector!= pVector1;tempVector++) { (*tempVector).first=8080; (*tempVector).second=8080; //point.erase(pVector); } return; } getNDistance(pVector,testVector1, limit); //迭代 getNDistance(testVector1,pVector1, limit); }
2维的Douglas-Peuker算法的算法函数,通过向里面传递vector 的iterator对两点间经行操作。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性
- C++ Custom Control控件向父窗体发送对应的消息