private void drawLine(Point start, Point end, Canvas canvas, Paint paint) {
   double d = MathUtils.distance(start.x, start.y, end.x, end.y);
   float cosA = (float) ((end.x - start.x) / d);
   float sinA = (float) ((end.y - start.y) / d);
   float rx = cosA * innerRadius;
   float ry = sinA * innerRadius;
   canvas.drawLine(rx + start.x, ry + start.y, end.x - rx, end.y - ry, paint);
 }
 private Point isInRound(float x, float y) {
   for (int i = 0; i < mPoints.length; i++) {
     for (int j = 0; j < mPoints[i].length; j++)
       if (MathUtils.isInRound(mPoints[i][j].x, mPoints[i][j].y, outerRadius, x, y))
         return mPoints[i][j];
   }
   return null;
 }
 private void drawArrow(Canvas canvas, Paint paint, Point start, Point end, float arrowHeight) {
   double d = MathUtils.distance(start.x, start.y, end.x, end.y);
   float cosB = (float) ((end.x - start.x) / d);
   float sinB = (float) ((end.y - start.y) / d);
   float tanC = (float) Math.tan(Math.PI / 4); // 箭头尖锐程度,默认为直角
   float h = (float) (d - arrowHeight - outerRadius);
   float l = arrowHeight * tanC;
   float a = l * cosB;
   float b = l * sinB;
   float x0 = h * cosB;
   float y0 = h * sinB;
   float x1 = start.x + (h + arrowHeight) * cosB;
   float y1 = start.y + (h + arrowHeight) * sinB;
   float x2 = start.x + x0 - b;
   float y2 = start.y + y0 + a;
   float x3 = start.x + x0 + b;
   float y3 = start.y + y0 - a;
   Path path = new Path();
   path.moveTo(x1, y1);
   path.lineTo(x2, y2);
   path.lineTo(x3, y3);
   path.close();
   canvas.drawPath(path, paint);
 }