private shiftCollidedLabels()

in src/radarChart.ts [727:790]


    private shiftCollidedLabels(labelPoints: RadarChartLabel[]): void {
        // from 0 to 90 shift up by Y
        let maxRadius: number = 0;
        labelPoints.forEach(point => {
            if (Math.abs(point.x) > maxRadius) {
                maxRadius = Math.abs(point.x);
            }
        });

        let shiftDirrectionIsDown: boolean = this.radarChartData.settings.displaySettings.axisBeginning === 1;

        for (let i: number = 0; i < labelPoints.length; i++) {
            let label: RadarChartLabel = labelPoints[i];

            // from 0 to 90 shift up by Y
            if (label.angleInDegree > RadarChart.Angle0Degree && label.angleInDegree < RadarChart.Angle90Degree) {
                this.shiftIntersectText(
                    label,
                    labelPoints.filter((l: RadarChartLabel) => l.angleInDegree <= RadarChart.Angle90Degree && l.angleInDegree >= RadarChart.Angle0Degree && l.index < label.index),
                    !shiftDirrectionIsDown
                );
            }
            // from 180 to 270 shift down by Y
            if (label.angleInDegree > RadarChart.Angle180Degree && label.angleInDegree < RadarChart.Angle270Degree) {
                this.shiftIntersectText(
                    label,
                    labelPoints.filter((l: RadarChartLabel) => l.angleInDegree < RadarChart.Angle270Degree && l.angleInDegree >= RadarChart.Angle180Degree && l.index < label.index),
                    shiftDirrectionIsDown
                );
            }

            label.maxWidth = this.viewportAvailable.width - Math.abs(label.x) - RadarChart.LabelMarginFactor;

            let labelDec: RadarChartLabel = labelPoints[labelPoints.length - 1 - i];
            // from 180 to 90 shift down by Y
            if (labelDec.angleInDegree > RadarChart.Angle90Degree && labelDec.angleInDegree < RadarChart.Angle180Degree) {
                this.shiftIntersectText(
                    labelDec,
                    labelPoints.filter((l: RadarChartLabel) => l.angleInDegree < RadarChart.Angle180Degree && l.angleInDegree > RadarChart.Angle90Degree && l.index > labelDec.index).reverse(),
                    shiftDirrectionIsDown
                );
            }
            // from 360 to 270 shift up by Y
            if (labelDec.angleInDegree > RadarChart.Angle270Degree && labelDec.angleInDegree < RadarChart.Angle360Degree) {
                this.shiftIntersectText(
                    labelDec,
                    labelPoints.filter((l: RadarChartLabel) => l.angleInDegree < RadarChart.Angle360Degree && l.angleInDegree > RadarChart.Angle270Degree && l.index > labelDec.index).reverse(),
                    !shiftDirrectionIsDown
                );
            }

            if (labelDec.angleInDegree < RadarChart.Angle180Degree) {
                while (labelDec.x * labelDec.x + labelDec.y * labelDec.y < maxRadius * maxRadius) {
                    labelDec.x += RadarChart.LabelHorizontalShiftStep;
                }
            }

            if (label.angleInDegree > RadarChart.Angle180Degree) {
                while (label.x * label.x + label.y * label.y < maxRadius * maxRadius) {
                    label.x -= RadarChart.LabelHorizontalShiftStep;
                }
            }
        }
    }