Blame view

node_modules/zrender/src/contain/arc.js 1.29 KB
aaac7fed   liuqimichale   add
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
52
53
54
55
56
57
58
  
  import {normalizeRadian} from './util';
  
  var PI2 = Math.PI * 2;
  
  /**
   * 圆弧描边包含判断
   * @param  {number}  cx
   * @param  {number}  cy
   * @param  {number}  r
   * @param  {number}  startAngle
   * @param  {number}  endAngle
   * @param  {boolean}  anticlockwise
   * @param  {number} lineWidth
   * @param  {number}  x
   * @param  {number}  y
   * @return {Boolean}
   */
  export function containStroke(
      cx, cy, r, startAngle, endAngle, anticlockwise,
      lineWidth, x, y
  ) {
  
      if (lineWidth === 0) {
          return false;
      }
      var _l = lineWidth;
  
      x -= cx;
      y -= cy;
      var d = Math.sqrt(x * x + y * y);
  
      if ((d - _l > r) || (d + _l < r)) {
          return false;
      }
      if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {
          // Is a circle
          return true;
      }
      if (anticlockwise) {
          var tmp = startAngle;
          startAngle = normalizeRadian(endAngle);
          endAngle = normalizeRadian(tmp);
      } else {
          startAngle = normalizeRadian(startAngle);
          endAngle = normalizeRadian(endAngle);
      }
      if (startAngle > endAngle) {
          endAngle += PI2;
      }
  
      var angle = Math.atan2(y, x);
      if (angle < 0) {
          angle += PI2;
      }
      return (angle >= startAngle && angle <= endAngle)
          || (angle + PI2 >= startAngle && angle + PI2 <= endAngle);
  }