lizhanwei
2020-03-18 ac5139566be8957be2f885b64850c09d35bebb38
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;
    }
}