Blame view

node_modules/zrender/src/contain/arc.ts 1.14 KB
bd028579   易尊强   2/28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
  
  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);
  }