sector.js
· 946 B · JavaScript
Raw
function getSectorPath(centre, rIn, rOut, startDeg, delta) {
const startOut = {
x: centre.x + rOut * Math.cos(startDeg),
y: centre.y + rOut * Math.sin(startDeg)
};
const endOut = {
x: centre.x + rOut * Math.cos(startDeg + delta),
y: centre.y + rOut * Math.sin(startDeg + delta)
};
const startIn = {
x: centre.x + rIn * Math.cos(startDeg + delta),
y: centre.y + rIn * Math.sin(startDeg + delta)
};
const endIn = {
x: centre.x + rIn * Math.cos(startDeg),
y: centre.y + rIn * Math.sin(startDeg)
};
const largeArc = delta > 180 ? 1 : 0;
return [
`M${startOut.x},${startOut.y}`, `A${rOut},${rOut}`, '0',
`${largeArc},1`, `${endOut.x},${endOut.y}`,
`L${startIn.x},${startIn.y}`,
`A${rIn},${rIn}`, '0', `${largeArc},0`,
`${endIn.x},${endIn.y}`,
`L${startOut.x},${startOut.y}`, 'Z',
].join(' ');
}
| 1 | function getSectorPath(centre, rIn, rOut, startDeg, delta) { |
| 2 | const startOut = { |
| 3 | x: centre.x + rOut * Math.cos(startDeg), |
| 4 | y: centre.y + rOut * Math.sin(startDeg) |
| 5 | }; |
| 6 | const endOut = { |
| 7 | x: centre.x + rOut * Math.cos(startDeg + delta), |
| 8 | y: centre.y + rOut * Math.sin(startDeg + delta) |
| 9 | }; |
| 10 | const startIn = { |
| 11 | x: centre.x + rIn * Math.cos(startDeg + delta), |
| 12 | y: centre.y + rIn * Math.sin(startDeg + delta) |
| 13 | }; |
| 14 | const endIn = { |
| 15 | x: centre.x + rIn * Math.cos(startDeg), |
| 16 | y: centre.y + rIn * Math.sin(startDeg) |
| 17 | }; |
| 18 | const largeArc = delta > 180 ? 1 : 0; |
| 19 | |
| 20 | return [ |
| 21 | `M${startOut.x},${startOut.y}`, `A${rOut},${rOut}`, '0', |
| 22 | `${largeArc},1`, `${endOut.x},${endOut.y}`, |
| 23 | `L${startIn.x},${startIn.y}`, |
| 24 | `A${rIn},${rIn}`, '0', `${largeArc},0`, |
| 25 | `${endIn.x},${endIn.y}`, |
| 26 | `L${startOut.x},${startOut.y}`, 'Z', |
| 27 | ].join(' '); |
| 28 | } |