yy1717
2020-07-06 e5659a16092dc90fd7b06f3659158ddae6e1edd3
app/src/main/java/safeluck/drive/evaluation/util/Utils.java
@@ -8,6 +8,7 @@
import com.anyun.exam.lib.MyLog;
import com.anyun.exam.lib.util.ByteUtil;
import com.google.gson.Gson;
import com.safeluck.aykj.utils.BytesUtils;
import java.io.File;
@@ -37,7 +38,11 @@
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import safeluck.drive.evaluation.app;
import safeluck.drive.evaluation.bean.CarModel;
import safeluck.drive.evaluation.bean.GisCarModel;
import safeluck.drive.evaluation.bean.Point;
import safeluck.drive.evaluation.httpmodule.GsonConverterFactory;
import static java.lang.Math.cos;
import static java.lang.Math.pow;
@@ -656,4 +661,84 @@
        }
    }
    public static List<CarModel> getCarModelData(Point basePoint, List<Integer> axial, List<Point> car){
        List<CarModel> carModelList = new ArrayList<>();
        double C02= (car.get(0).getX()-basePoint.getX())*(car.get(0).getX()-basePoint.getX()) + (car.get(0).getY()-basePoint.getY())*(car.get(0).getY()-basePoint.getY());
        double c0 = Math.sqrt(C02);
        CarModel carModel = new CarModel();
        carModel.setDistance(c0);
        carModel.setAngle(0.0);
        carModelList.add(carModel);
        for (int i = 1; i < car.size(); ++i) {
            double dis2 = (car.get(i).getX()-basePoint.getX())*(car.get(i).getX()-basePoint.getX()) + (car.get(i).getY()-basePoint.getY())*(car.get(i).getY()-basePoint.getY());
            double dis = Math.sqrt(dis2);
            CarModel c =new CarModel();
            c.setDistance(dis);
            c.setAngle(180 * Math.acos((dis2 + C02 - ((car.get(i).getX()-car.get(0).getX())*(car.get(i).getX()-car.get(0).getX()) +
                    (car.get(i).getY()-car.get(0).getY())*(car.get(i).getY()-car.get(0).getY())))/(2*c0*dis)) / Math.PI);
            if (i > axial.get(1)){
                c.setAngle( 360.0 - c.getAngle());
            }
            carModelList.add(c);
        }
        return carModelList;
    }
    public static List<Point> getCarPoint(double pitch,double yaw,Point point){
        pitch = 0;
//        yaw = 45;
        Point main_ant = point;
        List<Point> carNew = new ArrayList<>();
        StringBuffer buffer=FileUtil.readAssetTxtFile(app.getAppContext(),"giscar.json");
        Log.i(TAG,"giscar="+buffer.toString());
        GisCarModel gisCarModel= new Gson().fromJson(buffer.toString(),GisCarModel.class);
        List<Point> pointList = new ArrayList<Point>() ;
        for (int i = 0; i < gisCarModel.getPoint().size(); i++) {
                double x= gisCarModel.getPoint().get(i);
                i++;
                double y= gisCarModel.getPoint().get(i);
                pointList.add(new Point(x,y));
        }
        double mainAnt_x = gisCarModel.getMain_ant().get(0);
        double mainAnt_y = gisCarModel.getMain_ant().get(1);
        List<CarModel> carModels = getCarModelData(new Point(mainAnt_x, mainAnt_y),gisCarModel.getAxial(),pointList);
        if (carModels != null && carModels.size()>0){
            for (int i = 0; i < carModels.size(); ++i) {
                Log.i(TAG,String.format("位置[%d],distance=%f,angle=%f",i,carModels.get(i).getDistance(),carModels.get(i).getAngle()));
                double qrx = carModels.get(i).getDistance() * Math.sin(carModels.get(i).getAngle() * Math.PI / 180);
                double qry = carModels.get(i).getDistance() * Math.cos(carModels.get(i).getAngle() * Math.PI / 180) * Math.cos(pitch * Math.PI / 180);
                double projectDistance = Math.sqrt(Math.pow(qrx, 2) + Math.pow(qry, 2));
                double projectAngle = Math.acos(qry / projectDistance) * 180 / Math.PI;
                if (carModels.get(i).getAngle() > 180) {
                    projectAngle = 360 - projectAngle;
                }
                double X =
                        projectDistance * Math.sin(yaw * Math.PI / 180) * Math.cos(projectAngle * Math.PI / 180) -
                                projectDistance * Math.cos(yaw * Math.PI / 180) * Math.sin(projectAngle * Math.PI / 180) +
                                main_ant.getX();
                double Y =
                        projectDistance * Math.sin(yaw * Math.PI / 180) * Math.sin(projectAngle * Math.PI / 180) +
                                projectDistance * Math.cos(yaw * Math.PI / 180) * Math.cos(projectAngle * Math.PI / 180) +
                                main_ant.getY();
                carNew.add(new Point(X,Y));
            }
        }
        return carNew;
    }
}