Можно задействовать 2-й метод и ввести ограничение на углы:

Код:
angle = Math.atan2(dy, dx);
if (angle > 3*Math.PI/4)
{
angle = 3*Math.PI/4;
} else if (angle < Math.PI/4)
{
angle = Math.PI/4;
}
p2.x = p1.x+Math.cos(angle)*len;
p2.y = p1.y+Math.sin(angle)*len;
UPD:
Хотя мне кажется это не то, т.к. углы будут не относительными