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

时间:2013-11-16 10:07:43

标签: c# math linear-algebra

我不太确定我做错了什么,因为这应该相当简单...... 我有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;
    }

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

5 个答案:

答案 0 :(得分:10)

在您发布的代码中,您似乎犯了一个错字。这样:

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

......应该是:

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

答案 1 :(得分:3)

我原以为:

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

应该是

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

梯度是Y中的delta除以X中的delta。

答案 2 :(得分:3)

你想要这个:

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;
    }

答案 3 :(得分:1)

你在m的公式中给了point1.y两次。 另外,正如雅各布所注意到的,它应该是一个减号!

认为你想要

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

答案 4 :(得分:0)

为什么不尝试编写一个单独的函数来计算m,因此将其作为参数传递给此新函数,就像预测传递的x的y一样。 M应该是常数,对于所有x都应通过b,并且y应被计算出b。不是吗?