我不太确定我做错了什么,因为这应该相当简单...... 我有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;
}
现在这个公式中的某些内容是错误的,因为有时我没有得到正确的价值。你知道我做错了什么吗?
答案 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。不是吗?