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