展开全部

packagecom.mapbar.jts;

/***ClassPoint.java*/

publicclassPoint

{

/***点的X坐标*/privatedoublex=0;

/***点的Y坐标*/privatedoubley=0;

/***点所属的曲线的索引*/privateintindex=0;

publicdoublegetX() {returnx;}

publicvoidsetX(doublex) {this.x=x;}

publicdoublegetY() {returny;}

publicvoidsetY(doubley) {this.y=y;}

publicintgetIndex() {returnindex;}

publicvoidsetIndex(intindex) {this.index=index;}

/***点数据的构造e69da5e887aa3231313335323631343130323136353331333361303563方法**

@paramx*点的X坐标*@paramy*点的Y坐标*@paramindex点所属的曲线的索引*/

publicPoint(doublex,doubley,intindex)

{this.x=x;this.y=y;this.index=index;}

}

packagecom.mapbar.jts;

importjava.util.ArrayList;

importjava.util.List;

importcom.vividsolutions.jts.geom.Coordinate;

importcom.vividsolutions.jts.geom.Geometry;

importcom.vividsolutions.jts.io.ParseException;

importcom.vividsolutions.jts.io.WKTReader;

/***ClassDouglas.java*/

publicclassDouglas

{

/***存储采样点数据的链表*/

publicListpoints=newArrayList();

/***控制数据压缩精度的极差*/

privatestaticfinaldoubleD=1;

privateWKTReaderreader;

/***构造Geometry**@paramstr*@return*/

publicGeometrybuildGeo(Stringstr)

{

try

{

if(reader==null) {reader=newWKTReader();}

returnreader.read(str);

}

catch(ParseExceptione) {thrownewRuntimeException(buildGeometryError,e);}

}

/***读取采样点*/

publicvoidreadPoint()

{

Geometryg=buildGeo(LINESTRING(14,23,42,66,77,86,95,1010));

Coordinate[]coords=g.getCoordinates();

for(inti = 0;i < coords.length; i++)

{Pointp=newPoint(coords[i].x,coords[i].y,i);points.add(p);}

}

/***对矢量曲线进行压缩**@paramfrom*曲线的起始点*@paramto*曲线的终止点*/

publicvoidcompress(Pointfrom,Pointto)

{

/***压缩算法的开关量*/booleanswitchvalue=false;

/***由起始点和终止点构成的直线方程一般式的系数*/

System.out.println(from.getY());

System.out.println(to.getY());

doubleA=(from.getY()-to.getY())/Math.sqrt(Math.pow((from.getY()-to.getY()),2)+Math.pow((from.getX()-to.getX()),2));

/***由起始点和终止点构成的直线方程一般式的系数*/

doubleB=(to.getX()-from.getX())/Math.sqrt(Math.pow((from.getY()-to.getY()),2)+Math.pow((from.getX()-to.getX()),2));

/***由起始点和终止点构成的直线方程一般式的系数*/doubleC=(from.getX()*to.getY()-to.getX()*from.getY())/Math.sqrt(Math.pow((from.getY()-to.getY()),2)+Math.pow((from.getX()-to.getX()),2));

doubled=0;

doubledmax=0;

intm=points.indexOf(from);

intn=points.indexOf(to);

if(n == m+1) return;

Pointmiddle=null;

Listdistance=newArrayList();

for(inti = m+1;i < n;++)

{

d=Math.abs(A*(points.get(i).getX())+B*(points.get(i).getY())+C)/Math.sqrt(Math.pow(A,2)+Math.pow(B,2));

distance.add(d);

}

dmax=distance.get(0);

for(intj = 1;j < distance.size();j++)

{

if(distance.get(j) > dmax) dmax=distance.get(j);

}

if(dmax>D) switchvalue=true;

else switchvalue=false;

if(!switchvalue)

{

//删除Points(m,n)内的坐标

for(inti = m+1;i < n;i++)

points.get(i).setIndex(-1);

}

else

{

for(inti = m+1;i < n;i++)

{

if((Math.abs(A*(points.get(i).getX())+B*(points.get(i).getY())+C)/Math.sqrt(Math.pow(A,2)+Math.pow(B,2))==dmax))

middle=points.get(i);

}

compress(from,middle);

compress(middle,to);

}

}

publicstaticvoidmain(String[]args)

{

Douglasd=newDouglas();

d.readPoint();

d.compress(d.points.get(0),d.points.get(d.points.size()-1));

for(inti = 0;i < d.points.size();i++)

{

Pointp=d.points.get(i);

if(p.getIndex()>-1){System.out.print(p.getX()++p.getY()+,);}}

}

}

道格拉斯算法 java_道格拉斯-普克算法的java的实现代码如下相关推荐

  1. 170316.道格拉斯-普克算法

    道格拉斯-普克算法 道格拉斯-普克算法 (Douglas–Peucker algorithm,亦称为拉默-道格拉斯-普克算法.迭代适应点算法.分裂与合并算法)是乌尔斯·拉默(Urs Ramer)于19 ...

  2. c++多边形扫描线填充算法_基于MATLAB的道格拉斯普克算法递归实现

    道格拉斯普克算法 (道格拉斯-普克)Douglas-Peukcer算法由D.Douglas和T.Peueker于1973年提出,是线状要素抽稀的经典算法.用它处理大量冗余的几何数据点,既可以达到数据量 ...

  3. opencv 凸包convexHull、道格拉斯-普克算法Douglas-Peucker algorithm、approxPloyDP 函数

    凸包convexHull.道格拉斯-普克算法Douglas-Peucker algorithm.approxPloyDP 函数 道格拉斯-普克算法(Douglas–Peucker algorithm) ...

  4. OpenCV 学习笔记03 凸包convexHull、道格拉斯-普克算法Douglas-Peucker algorithm、approxPloyDP 函数...

    凸形状内部的任意两点的连线都应该在形状里面. 1 道格拉斯-普克算法 Douglas-Peucker algorithm 这个算法在其他文章中讲述的非常详细,此处就详细撰述. 下图是引用维基百科的.ε ...

  5. 基于道格拉斯普克算法的轮廓点简化

    道格拉斯普克算法(DP)对元素进行简化,这里介绍对轮廓点进行简化,如下图展示了轮廓点提取.DP保留的关键点.关键点生成的矢量线:  简化点连接生成的多边形 DP简化轮廓点后的关键点  关键点相连生成的 ...

  6. 道格拉斯-普克算法(Douglas–Peucker algorithm)

    道格拉斯-普克算法(Douglas–Peucker algorithm,亦称为拉默-道格拉斯-普克算法.迭代适应点算法.分裂与合并算法)是将曲线近似表示为一系列点,并减少点的数量的一种算法.该算法的原 ...

  7. matlab Douglas-Peucker 道格拉斯-普克算法

    c道格拉斯-普克算法 [1]  (Douglas–Peucker algorithm,亦称为拉默-道格拉斯-普克算法.迭代适应点算法.分裂与合并算法)是将曲线近似表示为一系列点,并减少点的数量的一种算 ...

  8. 道格拉斯-普克算法(经纬度或坐标点抽稀)

    起因 最近在做一个车联网项目,有一个场景是车辆定时上报当前所在经纬度等位置信息上报给平台,平台通过web页面在高德地图上展示车辆行驶路径. 由于车辆上报规则是每隔4s上报一次,一个小时也就是900个点 ...

  9. 【图像处理】道格拉斯-普克算法(曲线的折线段逼近)

    目录 一.提要 二.为什么要道格拉斯-普克算法 三.算法描述 四.代码实现 4.1 Python代码1 4.2 python代码2 五.结论 该文的应用见文章:[Halcon算子]get_contou ...

  10. C语言程序实现道格拉斯—普克算法(Douglas--Peucker)

    算法简介 道格拉斯-普克算法(Douglas-Peucker)也称,线简化算法.作用在于,删除冗余数据,减少数据的存贮量,节省存贮空间,加快后继处理的速度. 格拉斯-普克算法(Douglas-Peuc ...

最新文章

  1. 页面 切换 中英文 怎么实现_【完美解决】AE CC2018表达式错误 ae cc2018如何进行中英文转换?...
  2. stm32跑python-STM32F4系列使用MicroPython开发
  3. TensorFlow 中文文档 介绍
  4. Redis的持久化机制与内存管理机制
  5. LA3485二分+求解积分方程+辛普森算法计算积分
  6. 【java】第十三章、高级事件处理
  7. 局域网ip扫描工具_IP Scanner Pro for mac(局域网IP扫描软件)
  8. matlab 求傅里叶级数,MATLAB傅里叶级数.docx
  9. java excel导入jsp_导入导出EXCEL数据(jsp+ssh)
  10. java输入 以逗号隔开_要求做个java程序用户输入数字逗号隔开, 计算下面的公式 多谢了...
  11. TeKtronix TDS210数字示波器说明书
  12. 5G千兆智能网关的车联网应用
  13. 通过ICursor对Table进行操作(添加、修改、删除)
  14. NOIP2013提高组 day2
  15. IDEA项目发布中,Web Application:Exploded和Web Application:Archive的详细解释
  16. mysql slow queries,检查 mysql sql 效能使用 MySQL Slow Queries
  17. 地震波ifft matlab,地震波观测系统的MATLAB仿真报告
  18. 8.3K Star,这才是我们苦苦寻找的PDF阅读器。。。
  19. Ingress 资源与 networking.k8s.io/v1 问题
  20. android源代码文本转语音api,Android 文本转语音TextToSpeech (TTS)

热门文章

  1. MySQL / 自带的四个数据库介绍
  2. 启明云推SigmaStar SSD201 双网口开发板的双网口配置说明
  3. android ringtone获取uri,android – 如何通过文件路径从MediaStore获取Uri?
  4. offsetLeft 解析
  5. 2018多校1 hdu6298 6300 6308
  6. 敏捷开发knowledge
  7. Centos与Ubuntu
  8. CentOS下防御或减轻DDoS攻击方法(转)
  9. Linux 下的dd命令使用详解(摘录)
  10. JavaScript 开发者年度调查报告(2016-01)