Как получить кардинальное направление мыши от координат мыши

Некоторые определения из W3Schools:

Бесконечность: числовое значение, представляющее положительную / отрицательную бесконечность

Свойство POSITIVE_INFINITY представляет бесконечность, возвращаемое при переполнении. NEGATIVE_INFINITY, представляет отрицательную бесконечность (возвращается при переполнении).

Свойство NaN представляет значение «Not-a-Number». Это свойство указывает на то, что значение не является допустимым числом.

Функция isFinite () определяет, является ли число конечным, допустимым числом. Эта функция возвращает false, если значение равно + бесконечность, -infinity или NaN.

Некоторые тесты:

 var n1 = 1/0;
  var n2 = 0/0;
  var n3 = (Number.MAX_VALUE)*2; //overflow

  var b1 = Number.POSITIVE_INFINITY == n1;
  var b2 = Number.POSITIVE_INFINITY == n2;
  var b2n = Number.NEGATIVE_INFINITY == n2;
  var b3 = Number.POSITIVE_INFINITY == n3;

  var msg = "n1=" + n1 + ", n2=" + n2 + ", n3=" + n3;

  msg += "<br/> n1 Is POSITIVE_INFINITY=" + b1;
  msg += "<br/> n2 Is POSITIVE_INFINITY=" + b2;
  msg += "<br/> n2 Is POSITIVE_INFINITY=" + b2n;
  msg += "<br/> n3 Is POSITIVE_INFINITY=" + b3;

  msg += "<br/> n1 IsFinite=" + isFinite(n1);
  msg += "<br/> n2 IsFinite=" + isFinite(n2);
  msg += "<br/> n3 IsFinite=" + isFinite(n3);


  msg += "<br/> n1 + n1 =" + (n1 + n1) ;
  msg += "<br/> n1 - n1 =" + (n1 - n1) ;
  msg += "<br/> n2 + n1 =" + (n2 + n1) ;

  document.write(msg);

Показывает

n1=Infinity, n2=NaN, n3=Infinity
n1 Is POSITIVE_INFINITY=true
n2 Is POSITIVE_INFINITY=false
n2 Is POSITIVE_INFINITY=false
n3 Is POSITIVE_INFINITY=true
n1 IsFinite=false
n2 IsFinite=false
n3 IsFinite=false
n1 + n1 =Infinity
n1 - n1 =NaN
n1 - n1 =NaN
6
задан Don Kirkby 6 November 2009 в 18:33
поделиться

4 ответа

Вычисление угла кажется слишком сложным. Почему бы просто не сделать что-нибудь вроде:

int dx = e.X - lastX;
int dy = e.Y - lastY;
if(Math.Abs(dx) > Math.Abs(dy))
  direction = (dx > 0) ? Direction.Right : Direction.Left;
else
  direction = (dy > 0) ? Direction.Down : Direction.Up;
12
ответ дан 8 December 2019 в 13:00
поделиться

Я не думаю, что вам нужно рассчитывать угол. Учитывая две точки P1 и P2, вы можете проверить, действительно ли P2.x> P1.x, и узнать, пошло ли оно влево или вправо. Затем посмотрите на P2.y> P1.y, и вы узнаете, увеличилось оно или уменьшилось.

Затем посмотрите на большее из абсолютных значений дельты между ними, то есть abs (P2.x - P1.x) и abs (P2.y - P1.y), и то, что больше, говорит вам, было ли оно «более горизонтальным» или «более вертикальным», а затем вы можете решить, было ли что-то, что пошло вверх-LEFT, было UP или LEFT.

5
ответ дан 8 December 2019 в 13:00
поделиться

0,0 - верхний левый угол. Если текущий x> последний x, вы идете вправо. Если текущий y> последний y, вы идете вниз. Не нужно рассчитывать угол, если вас интересуют только верх \ вниз, влево \ вправо.

1
ответ дан 8 December 2019 в 13:00
поделиться

Грубо говоря, если величина (абсолютное значение) горизонтального перемещения (разница в координатах X) между последним положением и текущим положением больше, чем величина (абсолютное значение) вертикального перемещение (разница в координатах Y) между последней позицией и текущей позицией, затем перемещение влево или вправо; в противном случае - вверх или вниз. Затем все, что вам нужно сделать, это проверить знак направления движения, чтобы узнать, идет ли движение вверх или вниз, влево или вправо.

Вам не нужно беспокоиться об углах.

0
ответ дан 8 December 2019 в 13:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: