private Coordinate displaceFromCornerAwayFromArms(Coordinate nearPt, Coordinate p1, Coordinate p2, double dist)
{
Coordinate[] corner = orientCorner(nearPt, p1, p2);
boolean isInsideCorner = isInsideCorner(vertexPt, nearPt, corner[0], corner[1]);
Vector2D u1 = Vector2D.create(nearPt, corner[0]).normalize();
Vector2D u2 = Vector2D.create(nearPt, corner[1]).normalize();
double cornerAng = u1.angle(u2);
double maxAngToBisec = maxAngleToBisector(cornerAng);
Vector2D bisec = u2.rotate(cornerAng / 2);
if (! isInsideCorner) {
bisec = bisec.multiply(-1);
double outerAng = 2 * Math.PI - cornerAng;
maxAngToBisec = maxAngleToBisector(outerAng);
}
Vector2D pointwiseDisplacement = Vector2D.create(nearPt, vertexPt).normalize();
double stretchAng = pointwiseDisplacement.angleTo(bisec);
double stretchAngClamp = MathUtil.clamp(stretchAng, -maxAngToBisec, maxAngToBisec);
Vector2D cornerDisplacement = bisec.rotate(-stretchAngClamp).multiply(dist);
return cornerDisplacement.translate(vertexPt);
}