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