代码:
std::vector<double> symmetry(double a0, double b0, double c0, double k1, double k2) {
auto x1 = 2 * k1 - 1;
auto y1 = 2 * k2 - (a0 + b0 + c0);
auto x2 = 2 * k1 - 2;
auto y2 = 2 * k2 - (4 * a0 + 2 * b0 + c0);
auto x3 = 2 * k1 - 3;
auto y3 = 2 * k2 - (9 * a0 + 3 * b0 + c0);
double a = x1 * x1, b = x1, c = 1, r1 = y1;
double d = x2 * x2, e = x2, f = 1, r2 = y2;
double g = x3 * x3, h = x3, i = 1, r3 = y3;
auto D = a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g);
auto D1 = r1 * (e * i - f * h) - b * (r2 * i - f * r3) + c * (h * r2 - e * r3);
auto D2 = a * (i * r2 - f * r3) - r1 * (d * i - f * g) + c * (d * r3 - g * r2);
auto D3 = a * (e * r3 - r2 * h) - b * (d * r3 - r2 * g) + r1 * (d * h - e * g);
return std::vector<double> {D1 / D, D2 / D, D3 / D};
}
其中,函数参数的 a0、b0、c0 是抛物线 f(x)=ax2+bx+c 的三个参数,函数的参数的 k1、k2 是对称点 (k1,k2)。