點到線段的最短距離

Java code

private double pointToLine(int x1, int y1, int x2, int y2, int x0,
                int y0) {
            double space = 0;
            double a, b, c;
            a = lineSpace(x1, y1, x2, y2);// 線段的長度
            b = lineSpace(x1, y1, x0, y0);// (x1,y1)到點的距離
            c = lineSpace(x2, y2, x0, y0);// (x2,y2)到點的距離
            if (c <= 0.000001 || b <= 0.000001) {
                space = 0;
                return space;
            }
            if (a <= 0.000001) {
                space = b;
                return space;
            }
            if (c * c >= a * a + b * b) {
                space = b;
                return space;
            }
            if (b * b >= a * a + c * c) {
                space = c;
                return space;
            }
            double p = (a + b + c) / 2;// 半周長
            double s = Math.sqrt(p * (p - a) * (p - b) * (p - c));// 海倫公式求面積
            space = 2 * s / a;// 返回點到線的距離(利用三角形面積公式求高)
            return space;
        }

        // 計算兩點之間的距離
        private double lineSpace(int x1, int y1, int x2, int y2) {
            double lineLength = 0;
            lineLength = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2)
                    * (y1 - y2));
            return lineLength;

        }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章