import {normalizeRadian} from './util'; const PI2 = Math.PI * 2; /** * 圆弧描边包含判断 */ export function containStroke( cx: number, cy: number, r: number, startAngle: number, endAngle: number, anticlockwise: boolean, lineWidth: number, x: number, y: number ): boolean { if (lineWidth === 0) { return false; } const _l = lineWidth; x -= cx; y -= cy; const d = Math.sqrt(x * x + y * y); if ((d - _l > r) || (d + _l < r)) { return false; } // TODO if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) { // Is a circle return true; } if (anticlockwise) { const tmp = startAngle; startAngle = normalizeRadian(endAngle); endAngle = normalizeRadian(tmp); } else { startAngle = normalizeRadian(startAngle); endAngle = normalizeRadian(endAngle); } if (startAngle > endAngle) { endAngle += PI2; } let angle = Math.atan2(y, x); if (angle < 0) { angle += PI2; } return (angle >= startAngle && angle <= endAngle) || (angle + PI2 >= startAngle && angle + PI2 <= endAngle); }