inSector method
判断点是否在一个扇形上
Implementation
bool inSector(
num innerRadius,
num outerRadius,
num startAngle,
num sweepAngle, {
Offset center = Offset.zero,
}) {
double d1 = distance2(center);
if (d1 > outerRadius || d1 < innerRadius) {
return false;
}
if (sweepAngle.abs() >= 360) {
return true;
}
double angle = offsetAngle(center); //0-360
num sa = startAngle;
num ea = startAngle + sweepAngle;
num angleTmp = sa;
if (ea < sa) {
angleTmp = ea;
}
angleTmp %= 360;
if (angleTmp < 0) {
angleTmp += 360;
}
sweepAngle = sweepAngle.abs();
sweepAngle %= 360;
sa = angleTmp;
ea = angleTmp + sweepAngle;
if (ea <= 360) {
return angle > sa && (angle - sa) <= (ea - sa);
}
return (angle >= sa && angle <= 360) || (angle >= 0 && angle <= (ea - 360));
}