private void drawArrow(Graphics2D g, double fx, double fy, double tx, double ty) {
    double d = Point2D.distance(fx, fy, tx, ty);

    if (d == 0) return;

    double t = arrow_size / d;
    double cx0 = tx + 2 * t * (fx - tx);
    double cy0 = ty + 2 * t * (fy - ty);
    double cx1 = cx0 + t * (fy - ty);
    double cy1 = cy0 - t * (fx - tx);
    double cx2 = cx0 - t * (fy - ty);
    double cy2 = cy0 + t * (fx - tx);

    g.setStroke(arrow_stroke);
    Line2D.Double l2 = new Line2D.Double(cx1, cy1, tx, ty);
    g.draw(l2);
    l2.setLine(cx2, cy2, tx, ty);
    g.draw(l2);
  }