// quadratic interpolation by the three values in 0, 0.5, and 1
function qerp(y1, y2, y3, x) {
const a = 2.0*y1 - 4.0*y2 + 2.0*y3;
const b = -3.0*y1 + 4.0*y2 - y3;
const c = y1;
return a*x*x + b*x + c;
}
function q_transform(points, x, y) {
const x1 = qerp(points[0][0], points[1][0], points[2][0], x);
const x2 = qerp(points[3][0], points[4][0], points[5][0], x);
const x3 = qerp(points[6][0], points[7][0], points[8][0], x);
const x_transformed = qerp(x1, x2, x3, y);
const y1 = qerp(points[0][1], points[1][1], points[2][1], x);
const y2 = qerp(points[3][1], points[4][1], points[5][1], x);
const y3 = qerp(points[6][1], points[7][1], points[8][1], x);
const y_transformed = qerp(y1, y2, y3, y);
return [x_transformed, y_transformed];
}