2010-05-28 8 views
2

У меня есть два двумерных вектора, скажем u и v, определяемые декартовыми координатами.Самый быстрый способ найти поворот вектора

Представьте, что векторы - это иголки часов. Я ищу самый быстрый способ узнать, используя python, если v после или до u (или, другими словами, узнать, в какой половине плоскости v, относительно положения u). Для целей проблемы, если векторы выровнены, ответ должен быть до.

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

Мой тестовый пример:

def after(u, v): 
    """code here""" 
  • после того, как ((4,2), (6, 1)): Правда
  • после того, как ((4,2), (3, 3)) : Ложные
  • после того, как ((4,2), (2, 1)): Ложные
  • после того, как ((4,2), (3, -3)): Правда
  • после того, как ((4,2), (-2, -5)): True
  • после ((4,2), (-4, -2)): Ложные

ответ

13
def after(u, v): 
    # return sign of cross product 
    return u[0]*v[1]<u[1]*v[0] 

не знаю, если это быстро, но это лаконичный

+0

Спасибо. Это именно то, что я искал. – kriss

0

Общая идея: Поворот оси х совпадает с V и проверить, что новая координата у функции и является положительны.

+0

Если вы выработаете математику для вращения, используя эту ссылку http://en.wikipedia.org/wiki/Rotation_(mathematics)#Matrix_algebra, вы восстановите метод, предложенный Пит. – vad

0

Значит, вы хотите знать, какая сторона линии, представляющая вектор u, находится в точке вектора v? Я ударил Google (запрос: point on side of line) для алгоритма; нашел тонну, this one (прочитайте второй пост) делает это без тригонометрии.

0

Если вы собираетесь вращаться, вы можете использовать простую тригонометрию, чтобы выяснить вращение.

Помните три правила из класса трибуны средней школы? «SOH CAH TOA» звонит на любые колокола? Это то, что они имеют в виду:

Учитывая правильный треугольник:

A * 
    | \ 
    | \ 
    | \ 
B *----* C 

SOH:

Синуса любого угла, образованного ΔABC равна противоположной стороны длину, деленной на длине гипотенузы. Например, для того, чтобы найти угол, образованный в точке С:

   __ 
      AB 
SIN(∠BCA) = ---- 
      __ 
      AC 

CAH:

Косинус любого угла, образованного ΔABC равна длине смежной стороны (а не гипотенуза), деленная на длину гипотенузы.Так, например, чтобы найти угол, образованный в точке С:

   __ 
      BC 
COS(∠BCA) = ---- 
      __ 
      AC 

ТОА:

Тангенс любого угла, образованного ΔABC равна длине противоположной стороны, разделенное на длина соседней стороны (а не гипотенуза). Так, например, чтобы найти угол, образованный в точке С:

   __ 
      AB 
TAN(∠BCA) = ---- 
      __ 
      BC 

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

Смежные вопросы