根據拋物線公式 y = a(x-h)^2 + k ,移項得到 a = (y-k)/(x-h)^2,頂點代入->h = x1,k = y1,代入過點 x = x2, y = y2 ,得到 a = (y2-y1)/(x2-x1)^2。
__gcd(a,b) 找最大公因數
#include <iostream>
#include <algorithm> //__gcd
using namespace std;
int main()
{
int x1, y1, x2, y2;
while (cin >> x1 >> y1 >> x2 >> y2) {
int dx = x2 - x1;
int dy = y2 - y1; //分子
int fenmu = dx * dx; //分母
int g = __gcd(dy, fenmu); //分子&分母的最大公因數
int b = dy / g; //分子約分
int a = fenmu / g; //分母約分
int c = -2 * b * x1;
int d = b * x1 * x1 + y1 * a;
int G = __gcd(__gcd(a, abs(b)),__gcd(abs(c), abs(d)));
a /= G; b /= G; c /= G; d /= G;
cout << a << "y = " << b << "x^2 + " << c << "x + " << d << "\n";
}
}
y = a(x-h)^2 + k展開->y = ax^2 - (2ah)x + (ah^2+k)-> a(分母)為dy/fenmu = b/a ->y = (b/a)x^2 - (2 b/a * h)x+(b/a * h^2 + k) -> 同乘a ->
ay = (b)x^2 - (2 * b * x1)x + (b * x1 * x1 + y1 * a)。