cell2segments = {
const interp = (v1, v2, f) => (v1 == v2 ? v1 : v1 + f * (v2 - v1));
const test = ([pt1, v1], [pt2, v2], value) => {
if ((value >= v1 && value <= v2) || (value <= v1 && value >= v2)) {
const [[i1, j1], [i2, j2]] = [pt1, pt2];
const f = (value - v1) / (v2 - v1);
return [interp(i1, i2, f), interp(j1, j2, f)];
}
};
return ([pt1, pt2, pt3, pt4], value) => {
const [p1, p2] = [test(pt1, pt2, value), test(pt2, pt3, value)];
const [p3, p4] = [test(pt3, pt4, value), test(pt4, pt1, value)];
if (p1 && p2 && p3 && p4) {
const mean = (pt1[1] + pt2[1] + pt2[1] + pt3[1]) / 4;
const pair1 = mean > value ? [p1, p2] : [p1, p4];
const pair2 = mean > value ? [p3, p4] : [p3, p2];
return [pair1, pair2];
}
if (p1 && p2) return [[p1, p2]];
if (p2 && p3) return [[p2, p3]];
if (p3 && p4) return [[p3, p4]];
if (p4 && p1) return [[p4, p1]];
if (p1 && p3) return [[p1, p3]];
if (p2 && p4) return [[p2, p4]];
return [];
};
}