angular-sunburst-radar-chart
Version:
A Sunburst Radar chart with SVG,No Dependencies
31 lines • 5.52 kB
JavaScript
export function polarToCartesian(centerX, centerY, radius, angleInDegrees) {
const adjustedViewPortAngle = (angleInDegrees - 90);
const angleInRadians = adjustedViewPortAngle * Math.PI / 180.0;
return {
x: centerX + (radius * Math.cos(angleInRadians)),
y: centerY + (radius * Math.sin(angleInRadians))
};
}
export function getLargeArcFlag(startAngle, endAngle) {
return (endAngle - startAngle) <= 180 ? '0' : '1';
}
export function distanceBetweenTwoPoints(centerX, centerY, radius, startAngle, endAngle) {
const startPoint = polarToCartesian(centerX, centerY, radius, startAngle);
const endPoint = polarToCartesian(centerX, centerY, radius, endAngle);
const distFromStartToEnd = Math.sqrt(Math.pow((startPoint.x - endPoint.x), 2) + Math.pow((startPoint.y - endPoint.y), 2));
return Math.abs(distFromStartToEnd);
}
export function calculateAngleRadian({ x, y, centerX, centerY, maxRad }) {
let angleInRadian = Math.atan2(x - centerY, y - centerX);
angleInRadian = adjustAngleRadianDifference(angleInRadian, maxRad);
return angleInRadian;
}
export function adjustAngleRadianDifference(input, maxRad) {
let angleInRadian = input;
angleInRadian += maxRad / 4;
if (angleInRadian < 0) {
angleInRadian += maxRad;
}
return angleInRadian;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJpZ25vbWV0cnkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLXN1bmJ1cnN0LXJhZGFyLWNoYXJ0LyIsInNvdXJjZXMiOlsibGliL3V0aWxzL3RyaWdub21ldHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjO0lBRXZFLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDcEQsTUFBTSxjQUFjLEdBQUcscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFL0QsT0FBTztRQUNMLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRCxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7S0FDakQsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLFVBQVUsRUFBRSxRQUFRO0lBR2xELE9BQU8sQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNwRCxDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRO0lBRXJGLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBR3RFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUgsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFHdEMsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUM7SUFFbkUsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztJQUV6RCxhQUFhLEdBQUcsMkJBQTJCLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRW5FLE9BQU8sYUFBYSxDQUFDO0FBRXZCLENBQUM7QUFFRCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsS0FBSyxFQUFFLE1BQU07SUFDdkQsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzFCLGFBQWEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRTVCLElBQUksYUFBYSxHQUFHLENBQUMsRUFBRTtRQUNyQixhQUFhLElBQUksTUFBTSxDQUFDO0tBRXpCO0lBQ0QsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBwb2xhclRvQ2FydGVzaWFuKGNlbnRlclgsIGNlbnRlclksIHJhZGl1cywgYW5nbGVJbkRlZ3JlZXMpIHtcclxuXHJcbiAgY29uc3QgYWRqdXN0ZWRWaWV3UG9ydEFuZ2xlID0gKGFuZ2xlSW5EZWdyZWVzIC0gOTApO1xyXG4gIGNvbnN0IGFuZ2xlSW5SYWRpYW5zID0gYWRqdXN0ZWRWaWV3UG9ydEFuZ2xlICogTWF0aC5QSSAvIDE4MC4wO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgeDogY2VudGVyWCArIChyYWRpdXMgKiBNYXRoLmNvcyhhbmdsZUluUmFkaWFucykpLFxyXG4gICAgeTogY2VudGVyWSArIChyYWRpdXMgKiBNYXRoLnNpbihhbmdsZUluUmFkaWFucykpXHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldExhcmdlQXJjRmxhZyhzdGFydEFuZ2xlLCBlbmRBbmdsZSkge1xyXG5cclxuXHJcbiAgcmV0dXJuIChlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpIDw9IDE4MCA/ICcwJyA6ICcxJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQmV0d2VlblR3b1BvaW50cyhjZW50ZXJYLCBjZW50ZXJZLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlKSB7XHJcblxyXG4gIGNvbnN0IHN0YXJ0UG9pbnQgPSBwb2xhclRvQ2FydGVzaWFuKGNlbnRlclgsIGNlbnRlclksIHJhZGl1cywgc3RhcnRBbmdsZSk7XHJcbiAgY29uc3QgZW5kUG9pbnQgPSBwb2xhclRvQ2FydGVzaWFuKGNlbnRlclgsIGNlbnRlclksIHJhZGl1cywgZW5kQW5nbGUpO1xyXG5cclxuXHJcbiAgY29uc3QgZGlzdEZyb21TdGFydFRvRW5kID0gTWF0aC5zcXJ0KE1hdGgucG93KChzdGFydFBvaW50LnggLSBlbmRQb2ludC54KSwgMikgKyBNYXRoLnBvdygoc3RhcnRQb2ludC55IC0gZW5kUG9pbnQueSksIDIpKTtcclxuICByZXR1cm4gTWF0aC5hYnMoZGlzdEZyb21TdGFydFRvRW5kKTtcclxuXHJcblxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQW5nbGVSYWRpYW4oe3gsIHksIGNlbnRlclgsIGNlbnRlclksIG1heFJhZH0pIHtcclxuXHJcbiAgbGV0IGFuZ2xlSW5SYWRpYW4gPSBNYXRoLmF0YW4yKHggLSBjZW50ZXJZLCB5IC0gY2VudGVyWCk7XHJcblxyXG4gIGFuZ2xlSW5SYWRpYW4gPSBhZGp1c3RBbmdsZVJhZGlhbkRpZmZlcmVuY2UoYW5nbGVJblJhZGlhbiwgbWF4UmFkKTtcclxuXHJcbiAgcmV0dXJuIGFuZ2xlSW5SYWRpYW47XHJcblxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWRqdXN0QW5nbGVSYWRpYW5EaWZmZXJlbmNlKGlucHV0LCBtYXhSYWQpIHtcclxuICBsZXQgYW5nbGVJblJhZGlhbiA9IGlucHV0O1xyXG4gIGFuZ2xlSW5SYWRpYW4gKz0gbWF4UmFkIC8gNDtcclxuXHJcbiAgaWYgKGFuZ2xlSW5SYWRpYW4gPCAwKSB7XHJcbiAgICBhbmdsZUluUmFkaWFuICs9IG1heFJhZDtcclxuXHJcbiAgfVxyXG4gIHJldHVybiBhbmdsZUluUmFkaWFuO1xyXG59XHJcblxyXG5cclxuIl19