Для меня это очевидный способ сделать это: учитывая начальную точку и конечную точку, скажите мне, находится ли конечная точка вверх/вниз/влево/вверх/прямо ... и т. д. начальной точки. Heres ядра моей логики:Пожалуйста, покажите мне более элегантный способ сделать это
function getSector() {
var y = startY - endY;
var x = startX - endX;
var angle = Math.atan2(y,x) * 57.29578;//~57 deg per radian
//atan2(y,x) returns a num between -PI and PI, represents angle in radians
console.log("angle:" + angle);
if((angle > -22.5) && (angle < 22.5)) attackDir = "left";
if((angle > 22.5) && (angle < 67.5)) attackDir = "upleft";
if((angle > 67.5) && (angle < 112.5)) attackDir = "up";
if((angle > 112.5) && (angle < 157.5)) attackDir = "upright";
if((angle > 157.5) && (angle <= 180)) attackDir = "right";
if((angle > -179) && (angle <= -157)) attackDir = "right";
if((angle > -157) && (angle < -112.5)) attackDir = "downright";
if((angle > -112.5) && (angle < -67.5)) attackDir = "down";
if((angle > -67.5) && (angle < -22.5)) attackDir = "downleft";
console.log("attackDir:" + attackDir);
}
Я заинтересован в том, лучший способ, но более того, как вы пришли в этом пути.
Я предполагаю, что ключ сортов будет в порядке: слева = 0 до = 90 вправо = 179 или -179 (вниз, как отрицательное зеркало вверх) вниз = -90
Ваш код только иногда совпадает с равенством. Вы должны либо превратить все '>' 'в'> = ', либо все' '' 'в' <= '. –