Нахождение противоположного направления в системе координат - PullRequest
0 голосов
/ 08 сентября 2011

- это декартова система координат и точка (x, y) в этой системе. Например, точка p имеет координаты (-12,2):

                  |
                  |
      p           |
                  |
------------------+------------------>
                  |
                  |
                  |
                  |

Теперь мне нужна функция / алгоритм, который вычисляет противоположное «направление» (север, восток, юг, запад) от центра системы координат (0,0) на основе заданной точки. В нашем примере лучшим противоположным направлением для выбора будет ВОСТОК, следуя за осью Х вправо.

Тем не менее, в некоторых ситуациях в моем приложении можно выбрать не все направления, в таком случае следует выбрать следующее наилучшее направление. В нашем примере, если EAST не будет возможен, то следующим лучшим направлением будет SOUTH (затем NORTH, затем WEST).

Я мог бы решить это с помощью некоторых операторов if, но это не выглядит очень элегантно.
Любые другие (лучшие) идеи?

Ответы [ 2 ]

3 голосов
/ 08 сентября 2011

Используйте скалярное произведение вашего вектора (x, y) с единичными векторами в четырех направлениях

(1, 0), (-1, 0), (0, 1), (0, -1).

Наименьшее число соответствует желаемому направлению.Затем второе наименьшее и т. Д.

Это работает для любых направлений, а не только для E, W, S и N - вам просто нужно выбрать единичные векторы вдоль желаемых направлений и сравнить точечные произведения

2 голосов
/ 08 сентября 2011

«истинное» противоположное направление равно -P, т.е. (12, -2)

«Наилучшим» направлением является большая величина, т. Е. (12,0). Вы нормализуете его и получаете (1,0), что на восток.

Следующим наилучшим направлением является более короткая величина, то есть (0, -2). Вы нормализуете его и получите (0, -1), что на юг.

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

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