Tuple2D extends Point2D.Double implements ILocated2D { public double angleBetweenTargets(ILocated2D a, ILocated2D b) { double angle1 = a.getPosition().sub(this).angle(); double angle2 = b.getPosition().sub(this).angle(); return Math.abs(angle1 - angle2); } Tuple2D(double x, double y); boolean isZero(); double length(); Tuple2D normalize(); double angle(); Tuple2D midpoint(Tuple2D position); Tuple2D add(Tuple2D position); Tuple2D sub(ILocated2D rhs); Tuple2D mult(double i); Tuple2D div(double i); Tuple2D getPosition(); Tuple2D rotate(double radians); double distance(ILocated2D other); @Override String toString(); double angleBetweenTargets(ILocated2D a, ILocated2D b);  }
@Test public void testAngleBetweenTargets() { Tuple2D test = new Tuple2D(0, 0); Tuple2D a = new Tuple2D(1, 1); Tuple2D b = new Tuple2D(1, 0); double angle = test.angleBetweenTargets(a, b); assertEquals(angle, Math.PI / 4, ERROR); }