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