问题
已知两点(x1, y1) 和 (x2, y2),求某点(x, y) 到两点确定的直线的距离
代码
// 获取点到直线的距离
function getPointToLineDistance(list, point){
let [[x1, y1], [x2, y2]] = list;
let [x, y] = point;
if(x1 === x2){
return Math.abs(x - x1);
} else if(y1 === y2){
return Math.abs(y - y1);
}
return Math.abs((y1-y2) * x + (x2 - x1) * y + x1 * y2 - y1* x2)
/
Math.sqrt((y1 - y2) * (y1 - y2) + (x1 - x2) * (x1 - x2));
}
Math.abs(x) 函数返回指定数字 “x“ 的绝对值.
Math.sqrt(x) 函数返回指定数字 “x” 的平方根.
解析
- 先两点式求得直线方程
(x - x1) / (x1- x2) = (y - y1) / (y1 - y2)
- 求得一般式
(y1 - y2) * x + (x2 - x1) * y + x1 * y2 - y1 * x2 = 0
- 根据直线距离方程求点到直线距离
即distance = Math.abs((y1 - y2) * x + (x2 - x1) * y + x1 * y2 - y1 * x2 ) / Math.sqrt((y1 - y2) * (y1 - y2) + (x1 - x2) * (x1 - x2))
感谢
谢我婆娘指导我写该函数、