From ac5139566be8957be2f885b64850c09d35bebb38 Mon Sep 17 00:00:00 2001
From: lizhanwei <Dana_Lee1016@126.com>
Date: 星期三, 18 三月 2020 10:58:46 +0800
Subject: [PATCH] 增加路考绘图;两个点推出第三个点;增加路考地图对应的json类

---
 app/src/main/java/safeluck/drive/evaluation/util/Utils.java |   73 ++++++++++++++++++++++++++++++++++++
 1 files changed, 73 insertions(+), 0 deletions(-)

diff --git a/app/src/main/java/safeluck/drive/evaluation/util/Utils.java b/app/src/main/java/safeluck/drive/evaluation/util/Utils.java
index 689ee59..b53bcf2 100644
--- a/app/src/main/java/safeluck/drive/evaluation/util/Utils.java
+++ b/app/src/main/java/safeluck/drive/evaluation/util/Utils.java
@@ -1,6 +1,7 @@
 package safeluck.drive.evaluation.util;
 
 import android.content.res.Resources;
+import android.graphics.PointF;
 import android.os.SystemClock;
 import android.util.Log;
 import android.util.TypedValue;
@@ -17,6 +18,13 @@
 import javax.crypto.SecretKey;
 import javax.crypto.SecretKeyFactory;
 import javax.crypto.spec.DESKeySpec;
+
+import safeluck.drive.evaluation.bean.Point;
+
+import static java.lang.Math.cos;
+import static java.lang.Math.pow;
+import static java.lang.Math.sin;
+import static java.lang.Math.toRadians;
 
 /**
  * MyApplication2
@@ -312,6 +320,71 @@
         System.out.println("intCurrTIme="+CurrTIme);
         int unsignedTime=  parseUnsignedInt(String.valueOf(longCurrTIme),10);
         System.out.println("unsigned int time = "+unsignedTime);
+
+Point p1 = new Point(1.0,2.0);
+Point p2 = new Point(3.0,4.0);
+        System.out.println(Calc3Point(p1,p2,5.0).toString());
+    }
+
+    public static Point Calc3Point(Point p1,Point p2,double L ){
+        Point p3 = new Point(0.0,0.0);
+        System.out.println(p1.toString()+" "+p2.toString());
+        if (isEqual(p1.getX(), p2.getX())) {
+            p3.setY( p2.getY());
+            if (p2.getY() > p1.getY()) {
+                p3.setX(p2.getX() - L);
+            } else {
+                p3.setX(p2.getX() + L)  ;
+            }
+            return p3;
+        }
+        if (isEqual(p1.getY(), p2.getY())) {
+            p3.setX(p2.getX());
+            if (p2.getX() > p1.getX()) {
+                p3.setY(p2.getY()+L);
+            } else {
+                p3.setY(p2.getY() - L);
+            }
+            return p3;
+        }
+
+        double k = (p2.getY() - p1.getY()) / (p2.getX() - p1.getX());
+        double b = p1.getY() - k*p1.getX();
+
+        double A = 1 + pow(k, 2);
+        double B = 2*k*(b - p2.getY()) - 2*p2.getX();
+        double C = pow(b - p2.getY(), 2) + pow(p2.getX(), 2) - pow(L,2);
+
+        double x3, y3;
+
+
+        if (p1.getX() < p2.getX()) {
+            x3 = (- B - Math.sqrt(pow(B, 2) - 4*A*C))/(2*A);
+        } else {
+            x3 = (- B + Math.sqrt(pow(B, 2) - 4*A*C))/(2*A);
+        }
+        y3 = k * x3 + b;
+
+        p3.setX(x3);
+        p3.setY(y3);
+
+        p3 = rotatePoint(p3, p2, 270);
+
+        return p3;
+
+    }
+
+    private static boolean isEqual(double a,double b){
+        return (Math.abs(a-b)<1e-3);
+    }
+    private static Point rotatePoint(Point oldPoint,Point centre,double degree){
+
+        Point newPoint = new Point(0.0,0.0);
+        newPoint.setX((oldPoint.getX()-centre.getX())*cos(toRadians(degree)) -
+                (oldPoint.getY()-centre.getY())*sin(toRadians(degree)) + centre.getX()) ;
+        newPoint.setY( (oldPoint.getX()-centre.getX())*sin(toRadians(degree))
+                + (oldPoint.getY()-centre.getY())*cos(toRadians(degree)) + centre.getY());
+        return newPoint;
     }
 
 }

--
Gitblit v1.8.0