MCPcopy Index your code
hub / github.com/SuperMap/iClient-JavaScript / smoothBezier

Function smoothBezier

libs/echarts/echarts.simple.js:15969–16042  ·  view source on GitHub ↗
(points, smooth, isLoop, constraint)

Source from the content-addressed store, hash-verified

15967 * @param {Array} 计算出来的控制点数组
15968 */
15969var smoothBezier = function (points, smooth, isLoop, constraint) {
15970 var cps = [];
15971
15972 var v = [];
15973 var v1 = [];
15974 var v2 = [];
15975 var prevPoint;
15976 var nextPoint;
15977
15978 var min$$1;
15979 var max$$1;
15980 if (constraint) {
15981 min$$1 = [Infinity, Infinity];
15982 max$$1 = [-Infinity, -Infinity];
15983 for (var i = 0, len$$1 = points.length; i < len$$1; i++) {
15984 min(min$$1, min$$1, points[i]);
15985 max(max$$1, max$$1, points[i]);
15986 }
15987 // 与指定的包围盒做并集
15988 min(min$$1, min$$1, constraint[0]);
15989 max(max$$1, max$$1, constraint[1]);
15990 }
15991
15992 for (var i = 0, len$$1 = points.length; i < len$$1; i++) {
15993 var point = points[i];
15994
15995 if (isLoop) {
15996 prevPoint = points[i ? i - 1 : len$$1 - 1];
15997 nextPoint = points[(i + 1) % len$$1];
15998 }
15999 else {
16000 if (i === 0 || i === len$$1 - 1) {
16001 cps.push(clone$1(points[i]));
16002 continue;
16003 }
16004 else {
16005 prevPoint = points[i - 1];
16006 nextPoint = points[i + 1];
16007 }
16008 }
16009
16010 sub(v, nextPoint, prevPoint);
16011
16012 // use degree to scale the handle length
16013 scale(v, v, smooth);
16014
16015 var d0 = distance(point, prevPoint);
16016 var d1 = distance(point, nextPoint);
16017 var sum = d0 + d1;
16018 if (sum !== 0) {
16019 d0 /= sum;
16020 d1 /= sum;
16021 }
16022
16023 scale(v1, v, -d0);
16024 scale(v2, v, d1);
16025 var cp0 = add([], point, v1);
16026 var cp1 = add([], point, v2);

Callers 1

buildPath$1Function · 0.70

Calls 8

pushMethod · 0.80
minFunction · 0.70
maxFunction · 0.70
clone$1Function · 0.70
subFunction · 0.70
scaleFunction · 0.70
distanceFunction · 0.70
addFunction · 0.70

Tested by

no test coverage detected