private AffineTransform createArrowTransformFromLine(Line2D line) {
		double x1 = line.getX1();
		double y1 = line.getY1();
		double dx = x1 - line.getX2();
		double dy = y1 - line.getY2();
		double atheta = Math.atan2(dx, dy) + Math.PI / 2;
		AffineTransform at = AffineTransform.getTranslateInstance(x1, y1);
		at.rotate(-atheta);
		return at;
	}
Basic class to calculate the position of an edge arrow

@param <V> the vertex type
@param <E> the edge type
Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/edge/VisualEdgeArrowRenderingSupport.java