MCPcopy Create free account
hub / github.com/OpenSIST/OpenSIST.github.io / cubicBezierLength

Function cubicBezierLength

src/Components/WorldMap/display.js:72–97  ·  view source on GitHub ↗

* Based on snap.svg bezlen() function * https://github.com/adobe-webplatform/Snap.svg/blob/master/dist/snap.svg.js#L5786

(p0, cp1, cp2, p, t = 1)

Source from the content-addressed store, hash-verified

70 * https://github.com/adobe-webplatform/Snap.svg/blob/master/dist/snap.svg.js#L5786
71 */
72function cubicBezierLength(p0, cp1, cp2, p, t = 1) {
73 if (t === 0) {
74 return 0;
75 }
76 const base3 = (t, p1, p2, p3, p4) => {
77 const t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4,
78 t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3;
79 return t * t2 - 3 * p1 + 3 * p2;
80 };
81 t = t > 1 ? 1 : t < 0 ? 0 : t;
82 const t2 = t / 2;
83 const Tvalues = [-.1252, .1252, -.3678, .3678, -.5873, .5873, -.7699, .7699, -.9041, .9041, -.9816, .9816];
84 const Cvalues = [0.2491, 0.2491, 0.2335, 0.2335, 0.2032, 0.2032, 0.1601, 0.1601, 0.1069, 0.1069, 0.0472, 0.0472];
85
86
87 const n = Tvalues.length;
88 let sum = 0;
89 for (let i = 0; i < n; i++) {
90 const ct = t2 * Tvalues[i] + t2,
91 xbase = base3(ct, p0[0], cp1[0], cp2[0], p[0]),
92 ybase = base3(ct, p0[1], cp1[1], cp2[1], p[1]),
93 comb = xbase * xbase + ybase * ybase;
94 sum += Cvalues[i] * Math.sqrt(comb);
95 }
96 return t2 * sum;
97}
98
99function clamp(value, min, max) {
100 return Math.min(Math.max(value, min), max);

Callers 1

drawFlightFunction · 0.85

Calls 1

base3Function · 0.85

Tested by

no test coverage detected