在 Microsoft Excel 2013 中,如何找到数据点与已绘制线的相交位置?

在 Microsoft Excel 2013 中,如何找到数据点与已绘制线的相交位置?

我有一张包含一系列数据的图表,其中有一条趋势线和一个相关的趋势线方程(y = mx + b)。我还有另一系列数据,但只有 y 值。我想通过查看 y 值在趋势线上的相交位置来找到这组数据的 x 值。如何在 Excel 中执行此操作?

答案1

尽管我无法具体告诉您如何让 Excel 执行此操作,但我可以告诉您一般如何操作。

您首先需要的是每条线上的两个点,因此总共会有四个点。有了这些点的 x 和 y 值,总共会有 8 个值。如果我们将第一条线上的两个点称为点 1 和点 2,将第二条线上的两个点称为点 3 和点 4,最终会得到 x1、y1、x2、y2、x3、y3、x4、y4。现在您可以找到这两条线可能相交的点。我们将交点的 x 坐标称为 px,将交点的 y 坐标称为 py。以下将提供它们:

px = ((x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4)) / ((x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4));

py = ((x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4)) / ((x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4));

现在你只需要测试一下这个交点是否真的落在了两条线上。如果两条线都是无限的,那么你就找到了答案。否则,类似下面的方法就可以了:

//check x
    if (x3 < x4) {
        if (px > x3 && px < x4) {
            xInRange1 = true;
        }
    } else {
        if (px > x4 && px < x3) {
            xInRange1 = true;
        }
    }
    //check y
    if (y3 < y4) {
        if (py > y3 && py < y4) {
            yInRange1 = true;
        }
    } else {
        if (py > y4 && py < y3) {
            yInRange1 = true;
        }
    }

    //same for other line
    //check x
    if (x1 < x2) {
        if (px > x1 && px < x2) {
            xInRange2 = true;
        }
    } else {
        if (px > x2 && px < x1) {
            xInRange2 = true;
        }
    }
    //check y
    if (y1 < y2) {
        if (py > y1 && py < y2) {
            yInRange2 = true;
        }
    } else {
        if (py > y2 && py < y1) {
            yInRange2 = true;
        }
    }

最后,如果所有四个 InRange 值均为真,则确实存在一个交点。否则,交点位于线端点之外的某个位置。

if (xInRange1 && yInRange2 && xInRange2 && yInRange2) --Hurray, intersection point!

相关内容