java 計算線的方位角和兩條直線的交點

1、計算兩點方位角或者是直線的方位角

    public static double GetAzimuth(double dN1, double dE1, double dN2, double dE2) {
        double dAzimuth = 0;

        dAzimuth = Math.atan2(dE2 - dE1, dN2 - dN1) * 180 / Math.PI;
        if (dAzimuth < 0)
            dAzimuth += 360;

        return dAzimuth;
    }

2、計算兩條直線的交點

    //交叉
    private static double xmult(double xa, double ya, double xb, double yb,
                                double x0, double y0) {
        return (xa - x0) * (yb - y0) - (xb - x0) * (ya - y0);
    }

    public static boolean GetPointInLine(double xa, double ya, double xb, double yb,
                                         double xc, double yc) {
        if (Math.abs(xmult(xa, ya, xb, yb, xc, yc)) < 1E-4 &&
                (xa - xc) * (xb - xc) < 1E-4 && (ya - yc) * (yb - yc) < 1E-4) {
            return true;
        }
        return false;
    }

    /// 計算兩直線的交點
    public static boolean GetLineJoinPoint(double xa, double ya, double xb, double yb,
                                           double xc, double yc, double xd, double yd,
                                           double[] x, double[] y, boolean bBeeline) {
        //兩線平行
        if (Math.abs((xa - xb) * (yc - yd) - (xc - xd) * (ya - yb)) < 1E-4) {
            if (Math.abs(xa - xc) + Math.abs(ya - yc) < 1E-4 ||
                    Math.abs(xa - xd) + Math.abs(ya - yd) < 1E-4) {
                x[0] = xa;
                y[0] = ya;
                return true;
            } else if (Math.abs(xb - xc) + Math.abs(yb - yc) < 1E-4 ||
                    Math.abs(xb - xd) + Math.abs(yb - yd) < 1E-4) {
                x[0] = xb;
                y[0] = yb;
                return true;
            }
            return false;
        }

        //線段無交點(不在同一側)
        if (!bBeeline &&
                (xmult(xa, ya, xb, yb, xc, yc) * xmult(xa, ya, xb, yb, xd, yd) > 1E-4 ||
                        xmult(xc, yc, xd, yd, xa, ya) * xmult(xc, yc, xd, yd, xb, yb) > 1E-4)) {
            return false;
        }

        y[0] = ((xa - xb) * (yc - yd) * ya - (ya - yb) * (yc - yd) * xa - (xc - xd) * (ya - yb) * yc + (ya - yb) * (yc - yd) * xc) / ((xa - xb) * (yc - yd) - (xc - xd) * (ya - yb));

        if (Math.abs(ya - yb) < 1E-4) {
            x[0] = xc + (y[0] - yc) * (xc - xd) / (yc - yd);
        } else {
            x[0] = xa + (y[0] - ya) * (xa - xb) / (ya - yb);
        }

        return true;
    }

 

發佈了158 篇原創文章 · 獲贊 355 · 訪問量 74萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章