Код
Инвертировал значения top, сделав правую сторону окна аналогом OY (возможно, умнее было бы использовать bottom).
Вычислил по формуле
длину отрезка, где x1 y1 заданы top left позициями линии, x2 y2 - координаты курсора на экране.
По спертой с сайта-конвертера формуле высчитал угол между отрезком и OX, перевел в градусы
spoiler
getAngularCoefficient: function(x1, y1, x2, y2) {
let r = y2 - y1,
r1 = x2 - x1,
res,
angular;
if (r == 0 && r1 == 0) {
res = 0;
} else if (r != 0 && r1 == 0) {
res="Infinity";
} else {
let res1 = (+r) / (+r1);
res = Math.round(1000 * res1) / 1000;
};
angular = _methods.getAngular(res);
_methods.setLineDeg($LINE, angular);
},
Дальше начался геморрой, на котором я завис, проще посмотреть на самом примере.
Единственный участок, на котором отрезок ведет себя нормально - сектор Х, -Y
В секторе X Y отрезок бьется в конвульсиях.
В остальных секторах все не намного лучше, но там хотя бы очевидна причина - инвертируется знак значения угла.