Scala實現:已知三點坐標,求最短距離(如果在垂足不在線段內,最短距離為到其中一點的直線距離)




/**
* 已知三點坐標,求其中一點到另兩點的垂線距離
* (如果在垂足不在線段內,最短距離為到其中一點的直線距離)
* Created by wzq on 17-11-2.
*/
object Point2lineDistance {
def main(args: Array[String]) {
val v: Double = pointToLine(-3, 0, 3, 0, 0, 3)
System.out.println(v)
}

def pointToLine(x1: Int, y1: Int, x2: Int, y2: Int, x0: Int, y0: Int): Double = {
var space: Double = 0
var a: Double = .0
var b: Double = .0
var c: Double = .0
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
}
val p: Double = (a + b + c) / 2 // 半周長
val s: Double = Math.sqrt(p * (p - a) * (p - b) * (p - c)) // 海倫公式求面積
space = 2 * s / a // 返回點到線的距離(利用三角形面積公式求高)
space
}

// 計算兩點之間的距離
private def lineSpace(x1: Int, y1: Int, x2: Int, y2: Int): Double = {
var lineLength: Double = 0
lineLength = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))
lineLength
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM