已知ABC点的坐标,求B点的角度!

/**
 * 计算角度
 *
 * @param x
 * @param y
 * @param z
 * @return
 * @throws Exception
 */
public static long convertAngle(LatLng x, LatLng y, LatLng z) throws Exception {

    double a = Math.sqrt(Math.pow(y.latitude - z.latitude, 2) + Math.pow(y.longitude - z.longitude, 2));
    double b = Math.sqrt(Math.pow(x.latitude - z.latitude, 2) + Math.pow(x.longitude - z.longitude, 2));
    double c = Math.sqrt(Math.pow(x.latitude - y.latitude, 2) + Math.pow(x.longitude - y.longitude, 2));

    if (a + b > c) {
        double COSB = (Math.pow(c, 2) + Math.pow(a, 2) - Math.pow(b, 2)) / (2 * (a * c));
        double B = Math.acos(COSB) * 180 / Math.PI;

        return Math.round(B);
    } else {
        throw new Exception("不是一个有效的三角形");
    }
}

public static void main(String[] args) {
    try {
        LatLng x = new LatLng(29.699331, 106.374054);
        LatLng y = new LatLng(29.619989, 106.375779);
        LatLng z = new LatLng(29.619487, 106.267695);

        System.out.println(SystemUtil.convertAngle(x, y, z));
    } catch (Exception e) {
        e.printStackTrace();
    }

    //SystemUtil.convertAngle(-1, -1, -1, 1, 1, 1);
}


转载于:https://my.oschina.net/u/937385/blog/607846

你可能感兴趣的:(已知ABC点的坐标,求B点的角度!)