问题
已知两点(x1, y1) 和 (x2, y2),求某点(x, y) 到两点确定的直线的距离
代码
通过海伦公式+三角形面积公式求高,即点到已知两点距离
function getPointToLineDistance2(list, point){
let [[x1, y1], [x2, y2]] = list;
let [x, y] = point;
let b = Math.sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));
let c = Math.sqrt((x - x2) * (x - x2) + (y - y2) * (y - y2));
let a = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
if(a === 0) return b; // 如果选取两点为同一个点,则返回已知点和比较点的距离即可
// 原理:通过半周长和各边长度来计算三角形面积,即海伦公式
let p = (a + b + c) / 2; // 半周长,halfPerimeter
// 根据海伦公式求三角形面积
let areaSize = Math.abs(Math.sqrt(p * (p - a) * (p - b) * (p - c)));
// 根据三角形面积公式求证点到直线距离
return (2 * areaSize) / a;
}
Math.abs(x) 函数返回指定数字 “x“ 的绝对值.
Math.sqrt(x) 函数返回指定数字 “x” 的平方根.
解析
- 先计算三点之间直线距离
a
、b
、c
- 计算三角形半周长
- 经过海伦公式求证面积
- 根据面积公式求高 h