我有三个 X/Y 点,形成一条抛物线。我只需要计算经过这三个点的抛物线的顶点是什么。最好是一种快速的方法,因为我必须做很多这样的计算!
“询问科学家”网站提供这个答案 http://www.newton.dep.anl.gov/askasci/math99/math99028.htm:
抛物线的一般形式由以下方程给出: A * x^2 + B * x + C = y 其中 A、B 和 C 是任意实数常数。您有三对点,它们是 (x,y) 有序对。将每个点的 x 和 y 值代入抛物线方程。您将得到三个未知数(三个常数)的三个线性方程。然后,您可以轻松地求解这个由三个方程组组成的 A、B 和 C 值,并且您将得到与 3 个点相交的抛物线方程。顶点是一阶导数为 0 的地方,一点代数给出: ( -B/2A , C - B^2/4A ) 顶点。
很高兴看到用 C# 或 C++ 执行此计算的实际代码。有人吗?
谢谢 David,我将您的伪代码转换为以下 C# 代码:
public static void CalcParabolaVertex(int x1, int y1, int x2, int y2, int x3, int y3, out double xv, out double yv)
{
double denom = (x1 - x2) * (x1 - x3) * (x2 - x3);
double A = (x3 * (y2 - y1) + x2 * (y1 - y3) + x1 * (y3 - y2)) / denom;
double B = (x3*x3 * (y1 - y2) + x2*x2 * (y3 - y1) + x1*x1 * (y2 - y3)) / denom;
double C = (x2 * x3 * (x2 - x3) * y1 + x3 * x1 * (x3 - x1) * y2 + x1 * x2 * (x1 - x2) * y3) / denom;
xv = -B / (2*A);
yv = C - B*B / (4*A);
}
这就是我想要的。抛物线顶点的简单计算。稍后我将处理整数溢出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)