C# 线性函数:y=mx+;代码中的b(给出2分)

C# 线性函数:y=mx+;代码中的b(给出2分),c#,math,linear-algebra,C#,Math,Linear Algebra,我不太确定我做错了什么,因为这应该相当简单。。。 我有两个给定的点加上第三行的X,现在我需要第三行的Y 这是一个非常简单的方程:y=mx+b。 但是因为我不能在我的C#程序中使用它(好吧,我肯定有一个库,但是这里的性能很重要),所以我试图“写出公式” 我的函数如下所示: public static float GetY(Vector2 point1, Vector2 point2, float x) { var m = (point2.Y - point1.Y) / (p

我不太确定我做错了什么,因为这应该相当简单。。。 我有两个给定的点加上第三行的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);

我会认为:

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

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

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

在m的公式中,您已经两次输入了点1.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;
    }

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

“因为有时我得不到正确的值”-这意味着?你能举一个例子,说明输入和预期输出一起给出了错误的输出吗?这是你的
m
计算中的一个简单错误,用point1.X代替。@Rawling:哈哈,是的,我忘了修复那个位。谢谢