Учитывая координаты объекта, как определить, в каком квадранте повернутой системы координат это находится? - PullRequest
3 голосов
/ 22 января 2012

Я делаю простую программу симуляции и столкнулся с некоторыми проблемами ... Жители симулируемого мира имеют 4 глаза: влево, вверх, вправо и вниз. Только один глаз может быть активным в данный момент, и этот глаз должен указывать в направлении ближайшего объекта (по сути, он говорит жителю ближайший объект влево, вверх, вправо или вниз). Каждый глаз имеет свой квадрант в системе координат, который поворачивается от основной системы координат на 45 градусов. Все числа (позиции, координаты) на самом деле имеют отношение к неповоротной системе координат, я просто использую повернутую для объяснения, на самом деле ее там нет.

Вот картинка, которая объяснит это лучше: enter image description here Итак, последний вопрос: как узнать, в каком из этих квадрантов находится объект? Учитывая положение объекта в неповоротной системе координат.

Дополнительная информация:

  • Вся информация о положении объекта хранится в виде 4-значного вектора (прямоугольник), как [x, y, ширина, высота]
  • Это, конечно, 2D

1 Ответ

4 голосов
/ 22 января 2012

Пусть x , y - координаты объекта в неповоротной системе координат, переведенной так, что глаз лежит в начале координат. Вы можете воспользоваться преимуществами основных свойств двух линейных функций, чьи диаграммы делят ваше моделируемое пространство на четыре нарисованных вами квадранта («влево», «вверх», «вправо» и «вниз»).

Наклонная линия, идущая слева направо снизу вверх, задается как y = x . Это означает, что (если y растет вверх и x растет вправо), точки, лежащие в квадрантах "вниз" и "вправо", имеют координаты, удовлетворяющие y . Точно так же точки в квадрантах «вверх» и «влево» имеют координаты, удовлетворяющие y> x .

Чтобы различать «вниз» и «вправо» и «вверх» и «левый» квадрант, мы можем использовать другую строку (сверху слева направо вниз), формула которой y = -x . На этот раз мы видим, что точки, принадлежащие «левому» и «нисходящему» квадрантам, имеют координаты, подчиняющиеся y <-x </em>. Точно так же точки, принадлежащие квадрантам «вправо» и «вверх», имеют координаты, удовлетворяющие y> -x .

Комбинируя эти условия, мы видим, что объект с координатами x , y лежит в:

  • «левый» квадрант, если y> x и y <-x </em>
  • "вниз" квадрант, если y и y <-x </em>
  • "правильный" квадрант, если y и y> -x
  • квадрант "вверх" iff y> x и y> -x

В этих условиях предполагается, что точка, где встречаются все четыре квадранта, является источником системы координат, используемой для выражения x и y . Вы должны выполнить необходимый перевод, используя известное положение глаза, прежде чем использовать эти условия.

Обратите внимание, что если вы хотите выполнить этот процесс относительно нескольких глаз с разными позициями, вы должны каждый раз использовать разные переводы. Одним из нежелательных последствий этого является то, что вы можете получить разные квадранты для одних и тех же объектов двумя разными глазами. Это является следствием проблемы и не зависит от того, как вы ее решаете.

Вам также необходимо сделать выбор в отношении классификации объектов, лежащих точно на границе квадрантов. Выбор потребует от вас изменения некоторых строгих неравенств, приведенных выше, чтобы они учитывали равенство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...