@orca-fe/x-map
Version:
55 lines (54 loc) • 1.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.bezierMapPan = exports.bezierMapZoom = exports.bezier3 = exports.bezier2Area = exports.bezier2 = void 0;
// 二阶贝塞尔函数
function bezier2(start, c, end) {
return function (t) {
return (1 - t) * (1 - t) * start + 2 * t * (1 - t) * c + t * t * end;
// return start - (2 * (start - c)) * t - (2 * c - start - end) * t ** 2;
};
}
exports.bezier2 = bezier2;
// 二阶贝塞尔函数的面积公式
function bezier2Area(start, c, end) {
return function (t) {
return start * t - (start - c) * Math.pow(t, 2) - ((2 * c - start - end) / 3) * Math.pow(t, 3);
};
}
exports.bezier2Area = bezier2Area;
// 三阶贝塞尔函数
function bezier3(start, c1, c2, end) {
return function (t) {
return (start * (1 - t) * (1 - t) * (1 - t) + 3 * c1 * t * (1 - t) * (1 - t) + 3 * c2 * t * t * (1 - t) + end * t * t * t);
};
}
exports.bezier3 = bezier3;
// 专为地图组合的 zoom 参数变化函数
function bezierMapZoom(startZoom, middleZoom, endZoom) {
const bezierFrom = bezier2(startZoom, middleZoom, middleZoom);
const bezierTo = bezier2(middleZoom, middleZoom, endZoom);
return function (t) {
if (t < 0.5) {
return bezierFrom(t * 2);
}
return bezierTo(t * 2 - 1);
};
}
exports.bezierMapZoom = bezierMapZoom;
// 专为地图组合的 其他viewport 参数变化函数
function bezierMapPan() {
const bezierFromArea = bezier2Area(0, 1, 1);
const bezierToArea = bezier2Area(1, 1, 0);
const maxArea = bezierFromArea(1) + bezierToArea(1);
return function (t) {
let area = 0;
if (t <= 0.5) {
area = bezierFromArea(t * 2);
}
else {
area = bezierFromArea(1) + bezierToArea(t * 2 - 1);
}
return area / maxArea;
};
}
exports.bezierMapPan = bezierMapPan;