// @ts-nocheck
class interpolate {
constructor(e, t) {
var s, i, n, a, r, o, h, c, l, d, u, p, g;
if (null != e && null != t) {
for (
c = e.length - 1,
a = [],
u = [],
h = [],
d = [],
p = [],
i = [],
s = [],
n = [],
o = [],
l = [],
r = 0; 0 <= c ? r < c : r > c; 0 <= c ? (r += 1) : (r -= 1)
)
(a[r] = e[r + 1] - e[r]),
(o[r] = t[r + 1] - t[r]),
(l[r] = o[r] / a[r]);
for (r = 1; 1 <= c ? r < c : r > c; 1 <= c ? (r += 1) : (r -= 1))
u[r] =
(3 / a[r]) * (t[r + 1] - t[r]) - (3 / a[r - 1]) * (t[r] - t[r - 1]);
for (
h[0] = 1, d[0] = 0, p[0] = 0, r = 1; 1 <= c ? r < c : r > c; 1 <= c ? (r += 1) : (r -= 1)
)
(h[r] = 2 * (e[r + 1] - e[r - 1]) - a[r - 1] * d[r - 1]),
(d[r] = a[r] / h[r]),
(p[r] = (u[r] - a[r - 1] * p[r - 1]) / h[r]);
for (
h[c] = 1, p[c] = 0, i[c] = 0, r = g = c - 1; g <= 0 ? r <= 0 : r >= 0; g <= 0 ? (r += 1) : (r -= 1)
)
(i[r] = p[r] - d[r] * i[r + 1]),
(s[r] =
(t[r + 1] - t[r]) / a[r] - (a[r] * (i[r + 1] + 2 * i[r])) / 3),
(n[r] = (i[r + 1] - i[r]) / (3 * a[r]));
(this.x = e.slice(0, c + 1)),
(this.a1 = t.slice(0, c)),
(this.b1 = s),
(this.c1 = i.slice(0, c)),
(this.d1 = n);
}
}
interpolate(e) {
var t, s, i;
for (
s = i = this.x.length - 1;
(i <= 0 ? s <= 0 : s >= 0) && !(this.x[s] <= e); i <= 0 ? (s += 1) : (s -= 1)
);
return (
(t = e - this.x[s]),
this.a1[s] +
this.b1[s] * t +
this.c1[s] * Math.pow(t, 2) +
this.d1[s] * Math.pow(t, 3)
);
}
}
class CanvasSQ {
constructor(e = 0, t = 0) {
(this.x = e), (this.y = t);
}
distanceTo(e) {
return Math.sqrt(Math.pow(this.x - e.x, 2) + Math.pow(this.y - e.y, 2));
}
angleTo(e) {
let t = -(this.x - e.x),
s = this.y - e.y,
i = 360 - Math.atan2(s, t) * (180 / Math.PI);
return i < 0 && (i += 360), i > 360 && (i -= 360), i;
}
dot(e) {
return this.x * e.x + this.y * e.y;
}
lengthSQ() {
return this.dot(this);
}
length() {
return Math.sqrt(this.lengthSQ());
}
hypot2() {
return this.dot(this);
}
hypot() {
return Math.hypot(this.x, this.y);
}
add(e) {
return e ?
e instanceof CanvasSQ ?
new CanvasSQ(this.x + e.x, this.y + e.y) :
new CanvasSQ(this.x + e, this.y + e) :
this;
}
neg(e) {
return e instanceof CanvasSQ ?
new CanvasSQ(this.x - e.x, this.y - e.y) :
new CanvasSQ(this.x - e, this.y - e);
}
mul(e) {
return e instanceof CanvasSQ ?
new CanvasSQ(this.x * e.x, this.y * e.y) :
new CanvasSQ(this.x * e, this.y * e);
}
rotateAround(e, t) {
let s = Math.sin(t),
n = Math.cos(t),
a = this.x - e.x,
r = this.y - e.y,
o = a * s + r * n;
return new CanvasSQ(a * n - r * s + e.x, o + e.y);
}
equalTo(e) {
return this.x === e.x && this.y === e.y;
}
clone() {
return new CanvasSQ(this.x, this.y);
}
}
class interpolateCanvas {
constructor(e = 255, t = [], s = [], i = [], n = []) {
(this.scale = e),
(this.rgb = t),
(this.red = s),
(this.green = i),
(this.blue = n),
(this.percent = 1);
}
static getInterpolation(e, t) {
let s = [],
i = [],
a = new Float32Array(256);
for (var r = 0; r < t.length; r++) s.push(t[r].x * e), i.push(t[r].y * e);
console.log(s, i);
let o = new interpolate(s, i);
for (var h = 0; h < Math.ceil(s[0]); h++) a[h] = i[0];
for (h = Math.ceil(s[0]); h < Math.ceil(s[s.length - 1]); h++)
a[h] = o.interpolate(h);
for (h = Math.ceil(s[s.length - 1]); h < 256; h++) a[h] = i[i.length - 1];
return a;
}
static fillPaletteMap(e, t) {
let s = interpolateCanvas.getInterpolation(e.scale, e.rgb),
i = interpolateCanvas.getInterpolation(e.scale, e.red),
n = interpolateCanvas.getInterpolation(e.scale, e.green),
a = interpolateCanvas.getInterpolation(e.scale, e.blue);
for (let r = 0; r < 256; ++r) {
let o = r - s[r];
(t.data[4 * r] = r - Math.round((r - (i[r] - o)) * e.percent)),
(t.data[4 * r + 1] = r - Math.round((r - (n[r] - o)) * e.percent)),
(t.data[4 * r + 2] = r - Math.round((r - (a[r] - o)) * e.percent));
}
}
}
function createCurveSet(e) {
const t = new Array(),
s = new Array(),
n = new Array(),
a = new Array();
for (let r = 0; r < e[0].length; r += 2)
t.push(new CanvasSQ(e[0][r], e[0][r + 1]));
for (let r = 0; r < e[1].length; r += 2)
s.push(new CanvasSQ(e[1][r], e[1][r + 1]));
for (let r = 0; r < e[2].length; r += 2)
n.push(new CanvasSQ(e[2][r], e[2][r + 1]));
for (let r = 0; r < e[3].length; r += 2)
a.push(new CanvasSQ(e[3][r], e[3][r + 1]));
return new interpolateCanvas(1, t, s, n, a);
}
const canvas = createCurveSet([
[62, 64, 190, 191],
[0, 0, 133, 125, 255, 255],
[0, 0, 54, 65, 209, 208, 255, 255],
[60, 62, 96, 99, 240, 230, 255, 255],
]);
const value = interpolateCanvas.getInterpolation(canvas.scale, canvas.rgb);
// console.log(value);