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