Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 得到给定两点的x截距_Javascript_Linear Regression - Fatal编程技术网

Javascript 得到给定两点的x截距

Javascript 得到给定两点的x截距,javascript,linear-regression,Javascript,Linear Regression,这可能是一个有点简单的问题,但我似乎无法让它工作 我想找到给定两点的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]);

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

我想找到给定两点的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);

我建议您将点表示为
{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

我将用“数学”而不是代码来解释,也许这有助于理解这一切背后的原因:

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

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

因此,要计算x截距,您必须:

  • 检查是否为直线(例如,如果斜率=0)。如果是,则两个给定点的x坐标相等。如果它们为0,则x相交为整条线。如果它们不为零,则不存在x相交
  • 否则,您可以通过在上面的等式中将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交叉点位于

    是。就这么简单。谢谢。奖金:如何将y指定为0以外的值?例如,如果我想要y=20的x截距,请记住m可以是零。在这种情况下,请检查[0],如果[0]==0,则该线的每个点都位于x轴上。如果没有,就没有x相交
       0 = k*x + d
       0 = (-0,5)*x + 5,5
    -5,5 = (-0,5)*x
      11 = x