日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/10/8 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 道格拉斯算法 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的实现代码如下的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。