From e3bd13f6f12aae8a01a61d3368373fa9636549eb Mon Sep 17 00:00:00 2001 From: nilupeng <qingingrunt2010@qq.com> Date: Thu, 13 Jan 2022 10:16:30 +0000 Subject: [PATCH] 三角算法更新 --- app/src/main/java/com/demo/navtogether/MainActivity.java | 94 ++++++++++++++++++++++++++++++++-------------- 1 files changed, 65 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/com/demo/navtogether/MainActivity.java b/app/src/main/java/com/demo/navtogether/MainActivity.java index 3475c61..da20037 100644 --- a/app/src/main/java/com/demo/navtogether/MainActivity.java +++ b/app/src/main/java/com/demo/navtogether/MainActivity.java @@ -2,6 +2,7 @@ import androidx.appcompat.app.AppCompatActivity; +import android.app.ProgressDialog; import android.graphics.Point; import android.os.Bundle; import android.view.View; @@ -37,14 +38,7 @@ int height = planPathView.getMeasuredHeight(); int width = planPathView.getMeasuredWidth(); - ArrayList<PathPlan.Place> places = new ArrayList<>(); - places.add(new PathPlan.Place("A",random(width,height),0)); - places.add(new PathPlan.Place("B",random(width,height),0)); - places.add(new PathPlan.Place("C",random(width,height),0)); - places.add(new PathPlan.Place("D",random(width,height),0)); - places.add(new PathPlan.Place("E",random(width,height),0)); - places.add(new PathPlan.Place("F",random(width,height),0)); - planPathView.setPoints(places); + planPathView.setPoints(randomList(width,height)); planPathView.getViewTreeObserver().removeOnPreDrawListener(this); return true; @@ -69,11 +63,34 @@ /** * 创建随机位置 + * @param width 范围宽度 + * @param height 范围高度 + * @return + */ + public ArrayList<PathPlan.Place> randomList(int width,int height){ + + ArrayList<PathPlan.Place> places = new ArrayList<>(); + places.add(new PathPlan.Place("甲",random(width,height),0)); + places.add(new PathPlan.Place("乙",random(width,height),0)); + places.add(new PathPlan.Place("丙",random(width,height),0)); + places.add(new PathPlan.Place("丁",random(width,height),0)); + places.add(new PathPlan.Place("戊",random(width,height),0)); + places.add(new PathPlan.Place("己",random(width,height),0)); + places.add(new PathPlan.Place("庚",random(width,height),0)); + places.add(new PathPlan.Place("辛",random(width,height),0)); + places.add(new PathPlan.Place("壬",random(width,height),0)); + places.add(new PathPlan.Place("癸",random(width,height),0)); + return places; + } + + /** + * 创建一个随机位置 坐标限制在 x 和 y内 * @param maxX * @param maxY * @return */ public Point random(int maxX,int maxY){ + //设计边框距离,已避免部分地点名称出界 int marginX = (int) (getResources().getDisplayMetrics() .density*15)*2; Point point = new Point(); @@ -106,7 +123,7 @@ } int index = 0 ; - + ArrayList<ArrayList<PathPlan.Place>> customLists = new ArrayList<>(); /** * 自定义算法画线 * @param view @@ -114,19 +131,43 @@ public void drawLineCustom(View view){ planPathView.clearLines(); System.out.println("drawLineCustom " ); - HashMap<PathPlan.Place, PathPlan.Distance> distanceHashMap = PathPlan.intPoints(planPathView.getPoints()); - ArrayList<ArrayList<PathPlan.Place>> arrayLists = new DijkstraUtils(distanceHashMap).initCustomPathPlan(planPathView.getPoints().get(2), null); - if(arrayLists.size()>1){ - Toast.makeText(this,"当前有"+arrayLists.size()+"路线规划",Toast.LENGTH_SHORT).show(); + if(customLists == null || customLists.size() == 0) { + ProgressDialog progressDialog = new ProgressDialog(this); + progressDialog.setMessage("正在規劃路綫"); + progressDialog.show(); + new Thread(new Runnable() { + @Override + public void run() { + + HashMap<PathPlan.Place, PathPlan.Distance> distanceHashMap = PathPlan.intPoints(planPathView.getPoints()); + customLists = new DijkstraUtils(distanceHashMap).initCustomPathPlan(planPathView.getPoints().get(2), null); + runOnUiThread(new Runnable() { + @Override + public void run() { + System.out.println("drawLineCustom " ); + progressDialog.dismiss(); + drawLineCustome(); + } + }); + } + }).start(); + }else{ + drawLineCustome(); + } + } + + + /** + * 自定义算法画线 + */ + public void drawLineCustome(){ + if(customLists.size()>1){ + Toast.makeText(MainActivity.this,"当前有"+customLists.size()+"路线规划",Toast.LENGTH_SHORT).show(); } ArrayList<PlanPathView.Line> lines = new ArrayList<>(); - DecimalFormat df = new DecimalFormat("#.00"); - double totalLength = 0 ; - ArrayList<PathPlan.Place> arrayList = arrayLists.get(index % arrayLists.size()); + ArrayList<PathPlan.Place> arrayList = customLists.get(index % customLists.size()); for(int i = 0 ; i < arrayList.size() -1; i ++){ lines.add(new PlanPathView.Line(arrayList.get(i).point,arrayList.get(i+1).point,arrayList.get(i+1).distance)); - totalLength +=Double.parseDouble(df.format(arrayList.get(i).distance)); - System.out.println(arrayList.get(i)+" 距离:"+(i == arrayList.size() -1?"": TriangleUtils.getLengthOfSide(arrayList.get(i).point,arrayList.get(i+1).point)) +" "+arrayList.get(i).distance); } index++; if(animC){ @@ -137,22 +178,17 @@ } } - + /** + * 刷新 重新加载地点 + * @param view + */ public void refresh(View view) { planPathView.clear(); + customLists.clear(); int width = planPathView.getWidth(); int height = planPathView.getHeight(); - ArrayList<PathPlan.Place> places = new ArrayList<>(); - places.add(new PathPlan.Place("A",random(width,height),0)); - places.add(new PathPlan.Place("B",random(width,height),0)); - places.add(new PathPlan.Place("C",random(width,height),0)); - places.add(new PathPlan.Place("D",random(width,height),0)); - places.add(new PathPlan.Place("E",random(width,height),0)); - places.add(new PathPlan.Place("F",random(width,height),0)); - places.add(new PathPlan.Place("G",random(width,height),0)); - places.add(new PathPlan.Place("H",random(width,height),0)); animD = false; animC = false; - planPathView.setAnimPoints(places,listener); + planPathView.setAnimPoints(randomList(width,height),listener); } } \ No newline at end of file -- Gitblit v1.9.1