给定两点得到 x 截距

Get x intercept given two points

这可能是一个有点简单的问题,但我似乎无法让它工作。

我想找到给定两个点的 x 截距。

假设我有以下两点: (5,3) 和 (3,4) 我想找到 x 截距。 目前这就是我所拥有的。它正确地找到了 y 截距。在这种情况下 5.5.

var A = [5, 3];
var B = [3, 4];

function slope(a, b) {
    if (a[0] == b[0]) {
        return null;
    }

    return (b[1] - a[1]) / (b[0] - a[0]);
}

function intercept(point, slope) {
    if (slope === null) {
        // vertical line
        return point[0];
    }

    return point[1] - slope * point[0];
}

var m = slope(A, B);
console.log(m);

var b = intercept(A, m);
console.log('intercept: ' + b);
function xIntercept(a, m) {
    return a[0] - a[1] / m;
}

我建议您将点表示为 {x: 5, y: 3} 而不是 [5, 3],因为这样可以使代码的其余部分更加清晰。

给定一条直线 y = mx + n,它在 y=0 时截取 x 轴。

0 = xm + n  --> x = -n/m

所以 x 截距将为 -n/m

给定两个点 (x_1,y_1), (x_2,y_2),您可以这样找到斜率和 y 轴截距:

m = (y_2-y_1)/(x_2-x_1)
n = -x_1*(y_2-y_1)/(x_2-x_1) + y_1

那么,x 轴截距将为

x_1 - y_1*(x_2-x_1)/(y_2-y_1)

在JavaScript,

function x_intercept(a, b) {
  return a[0] - a[1]*(b[0]-a[0])/(b[1]-a[1]);
}
x_intercept([5, 3], [3, 4]); // 11

我将用 "math" 而不是代码来解释它,也许这有助于理解这一切背后的原因:

直线的常用方程可以表示为: y = kx + d

其中 k 是斜率,d 是线的 y 交点。

所以要计算 x 截距,您必须:

  1. 检查它是否是一条直线(例如,如果坡度==0)。如果是,则 2 个给定点的 x 坐标相等。如果它们为 0,则 x 交点为整条线。如果它们不为零,则没有 x 交集。
  2. 否则,您可以通过在上述等式中将 y 设置为零来获得 x 交点的 y 值,如下所示:0 = k*x + d

然后我们继续:

   0 = k*x + d
   0 = (-0,5)*x + 5,5
-5,5 = (-0,5)*x
  11 = x

找到 x 交点在