【发布时间】:2020-01-21 08:49:47
【问题描述】:
我正在尝试获取一个函数来计算由 2 个坐标定义的线是否与由坐标和半径定义的圆相交。我之前用过这两个函数
getLineEquation(point1, point2) {
var lineObj = {
gradient: (point1.latitude - point2.latitude) / (point1.longitude - point2.longitude)
};
lineObj.yIntercept = point1.latitude - lineObj.gradient * point1.longitude;
return lineObj;
}
checkIntercept(y, m, circle) {
// y: y intercept of line
// m: gradient of line
// get a,b,c values
var a = 1 + (m * m);
var b = -circle.longitude * 2 + (m * (y - circle.latitude)) * 2;
var c = (circle.longitude * circle.longitude) + ((y - circle.latitude)* (y - circle.latitude)) - (circle.range * circle.range);
// get discriminant
var d = (b * b) - 4 * a * c;
if (d >= 0) {
// insert into quadratic formula
var intersections = [
(-b + Math.sqrt((b * b) - 4 * a * c)) / (2 * a),
(-b - Math.sqrt((b * b) - 4 * a * c)) / (2 * a)
];
if (d == 0) {
// only 1 intersection
return [intersections[0]];
}
return intersections;
}
// no intersection
return false;
}
但这不起作用,因为它将 2 个点转换为一条无限线,我不希望这样做,因为它会为实际上不在 2 个点之间的圆返回错误的读数。
我怎样才能修复这些函数以使计算变成一条有限的线?
【问题讨论】:
-
等等,上下文。我们是在谈论平面几何,还是在谈论球体,因为有两个点定义的不是一条线,而是无限个可能的圆。
标签: javascript math coordinates