道格拉斯算法 java_道格拉斯-普克算法的java的实现代码如下
展开全部
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的实现代码如下相关推荐
- 170316.道格拉斯-普克算法
道格拉斯-普克算法 道格拉斯-普克算法 (Douglas–Peucker algorithm,亦称为拉默-道格拉斯-普克算法.迭代适应点算法.分裂与合并算法)是乌尔斯·拉默(Urs Ramer)于19 ...
- c++多边形扫描线填充算法_基于MATLAB的道格拉斯普克算法递归实现
道格拉斯普克算法 (道格拉斯-普克)Douglas-Peukcer算法由D.Douglas和T.Peueker于1973年提出,是线状要素抽稀的经典算法.用它处理大量冗余的几何数据点,既可以达到数据量 ...
- opencv 凸包convexHull、道格拉斯-普克算法Douglas-Peucker algorithm、approxPloyDP 函数
凸包convexHull.道格拉斯-普克算法Douglas-Peucker algorithm.approxPloyDP 函数 道格拉斯-普克算法(Douglas–Peucker algorithm) ...
- OpenCV 学习笔记03 凸包convexHull、道格拉斯-普克算法Douglas-Peucker algorithm、approxPloyDP 函数...
凸形状内部的任意两点的连线都应该在形状里面. 1 道格拉斯-普克算法 Douglas-Peucker algorithm 这个算法在其他文章中讲述的非常详细,此处就详细撰述. 下图是引用维基百科的.ε ...
- 基于道格拉斯普克算法的轮廓点简化
道格拉斯普克算法(DP)对元素进行简化,这里介绍对轮廓点进行简化,如下图展示了轮廓点提取.DP保留的关键点.关键点生成的矢量线: 简化点连接生成的多边形 DP简化轮廓点后的关键点 关键点相连生成的 ...
- 道格拉斯-普克算法(Douglas–Peucker algorithm)
道格拉斯-普克算法(Douglas–Peucker algorithm,亦称为拉默-道格拉斯-普克算法.迭代适应点算法.分裂与合并算法)是将曲线近似表示为一系列点,并减少点的数量的一种算法.该算法的原 ...
- matlab Douglas-Peucker 道格拉斯-普克算法
c道格拉斯-普克算法 [1] (Douglas–Peucker algorithm,亦称为拉默-道格拉斯-普克算法.迭代适应点算法.分裂与合并算法)是将曲线近似表示为一系列点,并减少点的数量的一种算 ...
- 道格拉斯-普克算法(经纬度或坐标点抽稀)
起因 最近在做一个车联网项目,有一个场景是车辆定时上报当前所在经纬度等位置信息上报给平台,平台通过web页面在高德地图上展示车辆行驶路径. 由于车辆上报规则是每隔4s上报一次,一个小时也就是900个点 ...
- 【图像处理】道格拉斯-普克算法(曲线的折线段逼近)
目录 一.提要 二.为什么要道格拉斯-普克算法 三.算法描述 四.代码实现 4.1 Python代码1 4.2 python代码2 五.结论 该文的应用见文章:[Halcon算子]get_contou ...
- C语言程序实现道格拉斯—普克算法(Douglas--Peucker)
算法简介 道格拉斯-普克算法(Douglas-Peucker)也称,线简化算法.作用在于,删除冗余数据,减少数据的存贮量,节省存贮空间,加快后继处理的速度. 格拉斯-普克算法(Douglas-Peuc ...
最新文章
- 页面 切换 中英文 怎么实现_【完美解决】AE CC2018表达式错误 ae cc2018如何进行中英文转换?...
- stm32跑python-STM32F4系列使用MicroPython开发
- TensorFlow 中文文档 介绍
- Redis的持久化机制与内存管理机制
- LA3485二分+求解积分方程+辛普森算法计算积分
- 【java】第十三章、高级事件处理
- 局域网ip扫描工具_IP Scanner Pro for mac(局域网IP扫描软件)
- matlab 求傅里叶级数,MATLAB傅里叶级数.docx
- java excel导入jsp_导入导出EXCEL数据(jsp+ssh)
- java输入 以逗号隔开_要求做个java程序用户输入数字逗号隔开, 计算下面的公式 多谢了...
- TeKtronix TDS210数字示波器说明书
- 5G千兆智能网关的车联网应用
- 通过ICursor对Table进行操作(添加、修改、删除)
- NOIP2013提高组 day2
- IDEA项目发布中,Web Application:Exploded和Web Application:Archive的详细解释
- mysql slow queries,检查 mysql sql 效能使用 MySQL Slow Queries
- 地震波ifft matlab,地震波观测系统的MATLAB仿真报告
- 8.3K Star,这才是我们苦苦寻找的PDF阅读器。。。
- Ingress 资源与 networking.k8s.io/v1 问题
- android源代码文本转语音api,Android 文本转语音TextToSpeech (TTS)