After working with this code for a little while, and having it not work correctly, and staring at it for a long time, I finally realized there's an error in it. Since no one else caught it, I thought I'd post it myself:
1 2 3 4 5
| double changeX = getP1 ().getX () - getP2 ().getX () ; double changeY = getP1 ().getY () - getP2 ().getY () ; |
and
1 2 3 4 5 6
| Point2D.Float newEnd = new Point2D.Float ( ( float ) ( getP1 ().getX () + newX ) , ( float ) ( getP1 ().getY () + newY ) ) ; |
add up to the new line segment heading away from the target point, not towards it. To correct this, either the first snippet needs to be changed to
1 2 3 4 5
| double changeX = getP2 ().getX () - getP1 ().getX () ; double changeY = getP2 ().getY () - getP1 ().getY () ; |
which will result in the positivity/negativity of the changeX and changeY being reversed, or
1 2 3 4 5 6
| Point2D.Float newEnd = new Point2D.Float ( ( float ) ( getP1 ().getX () - newX ) , ( float ) ( getP1 ().getY () - newY ) ) ; |
which does almost the same thing.
Clear as mud? Well, I tried.