См. Этот ответ: { ссылка }
function polarToCartesian(centerX, centerY, radius, angleInDegrees) {
var angleInRadians = (angleInDegrees-90) * Math.PI / 180.0;
return {
x: centerX + (radius * Math.cos(angleInRadians)),
y: centerY + (radius * Math.sin(angleInRadians))
};
}
При этом вы можете назвать его с 45 в качестве 4-го аргумента, то есть:
const pos = polarToCartesian(startx, starty, radius, 45)
Это требует от вас знать радиус, который вы хотите нарисовать. Или вы можете получить его из своей функции, например:
angle(startx, starty, endx, endy) {
const dy = endy - starty;
const dx = endx - startx;
const radius = Math.sqrt(dy**2 + dx**2);
const pos = polarToCartesian(startx, starty, radius, 45);
let theta = Math.atan2(dy, dx); // range (-PI, PI]
theta *= 180 / Math.PI; // rads to degs, range (-180, 180]
//if (theta < 0) theta = 360 + theta; // range [0, 360)
return Math.abs(theta) > 90 ? theta % 90 : theta;
}
Важными строками являются const radius = Math.sqrt(dy**2 + dx**2);
, за которыми следует const pos = polarToCartesian(startx, starty, radius, 45)
Я предполагаю, что вы хотите изменить свой окончательный возврат, чтобы проверить, текущая тета ближе к 45, чем к 0 или 90? И тогда, если это так, нарисуйте 45-градусную линию вместо этого?
Есть вопросы, или, если я неправильно понял вашу цель, пожалуйста, дайте мне знать.