线性函数:y = mx + b(给定 2 个点)在代码中



我不太确定我做错了什么,因为这应该相当简单......我有 2 个给定的点加上第三行的 X - 现在我需要第三行的 Y。

这是一个非常简单的等式:y = mx + b。但是因为我不能在我的 C# 程序中使用它(嗯,我确定有一个库,但性能在这里很重要),我正在尝试"写出公式"。

我的函数如下所示:

public static float GetY(Vector2 point1, Vector2 point2, float x)
    {
        var m = (point2.Y - point1.Y) / (point2.X + point1.Y);
        var b = point1.Y - (m * point1.X);
        return m*x + b;
    }

现在这个公式中的某些东西是错误的,因为有时我没有得到正确的值。你知道我做错了什么吗?

在您发布的代码中,您似乎打错了字。这:

var m = (point2.Y - point1.Y) / (point2.X + point1.Y);

。应该是:

var m = (point2.Y - point1.Y) / (point2.X - point1.X);

你想要这个:

public static float GetY(Vector2 point1, Vector2 point2, float x)
    {
        var dx = point2.X - point1.x;  //This part has problem in your code
        if (dx == 0)
            return float.NaN;
        var m = (point2.Y - point1.Y) / dx;
        var b = point1.Y - (m * point1.X);
        return m*x + b;
    }

我会认为:

var m = (point2.Y - point1.Y) / (point2.X + point1.Y);

应该是

var m = (point2.Y - point1.Y) / (point2.X - point1.X);

梯度是 Y 中的增量除以 X 中的增量。

您在 m 的公式中放置了两次 point1.y。此外,正如雅各布所注意到的那样,它应该是一个减号!

想你想要

var m = (point2.Y - point1.Y) / (point2.X - point1.X);

为什么你不尝试编写一个单独的函数来计算 m,所以它只是作为一个参数传递给这个新函数,就像预测传递的 x 的 y 一样。M 应该是常数,对于所有 x 被传递和 y 被计算,也是 b。不是吗?

相关内容

  • 没有找到相关文章