mirror of
https://github.com/chartjs/Chart.js.git
synced 2024-10-06 20:29:12 +02:00
Merge pull request #1164 from etimberg/fix/angle-calculation
Fix the angle calculation for slice detection
This commit is contained in:
commit
5b5463b6f9
@ -370,12 +370,10 @@
|
|||||||
distanceFromYCenter = anglePoint.y - centrePoint.y,
|
distanceFromYCenter = anglePoint.y - centrePoint.y,
|
||||||
radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);
|
radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);
|
||||||
|
|
||||||
|
var angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);
|
||||||
|
|
||||||
var angle = Math.PI * 2 + Math.atan2(distanceFromYCenter, distanceFromXCenter);
|
if (angle < (-0.5 * Math.PI)) {
|
||||||
|
angle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2]
|
||||||
//If the segment is in the top left quadrant, we need to add another rotation to the angle
|
|
||||||
if (distanceFromXCenter < 0 && distanceFromYCenter < 0) {
|
|
||||||
angle += Math.PI * 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@ -1443,8 +1441,12 @@
|
|||||||
y: chartY
|
y: chartY
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Put into the range of (-PI/2, 3PI/2]
|
||||||
|
var startAngle = vm.startAngle < (-0.5 * Math.PI) ? vm.startAngle + (2.0 * Math.PI) : vm.startAngle;
|
||||||
|
var endAngle = vm.endAngle < (-0.5 * Math.PI) ? vm.endAngle + (2.0 * Math.PI) : vm.endAngle
|
||||||
|
|
||||||
//Check if within the range of the open/close angle
|
//Check if within the range of the open/close angle
|
||||||
var betweenAngles = (pointRelativePosition.angle >= vm.startAngle && pointRelativePosition.angle <= vm.endAngle),
|
var betweenAngles = (pointRelativePosition.angle >= startAngle && pointRelativePosition.angle <= endAngle),
|
||||||
withinRadius = (pointRelativePosition.distance >= vm.innerRadius && pointRelativePosition.distance <= vm.outerRadius);
|
withinRadius = (pointRelativePosition.distance >= vm.innerRadius && pointRelativePosition.distance <= vm.outerRadius);
|
||||||
|
|
||||||
return (betweenAngles && withinRadius);
|
return (betweenAngles && withinRadius);
|
||||||
|
Loading…
Reference in New Issue
Block a user