inSector method

bool inSector(
  1. num innerRadius,
  2. num outerRadius,
  3. num startAngle,
  4. num sweepAngle, {
  5. Offset center = Offset.zero,
})

判断点是否在一个扇形上

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));
}