道格拉斯算法 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的实现代码如下的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 体育馆广场收钱吧台叫什么
- 下一篇: 为啥盘锦市烧鸡专卖店非常多?