Самый быстрый способ найти вращение вектора - PullRequest
2 голосов
/ 28 мая 2010

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

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

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

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

def after(u, v):
    """code here"""
  • после ((4,2), (6, 1)): True
  • после ((4,2), (3, 3)): False
  • после ((4,2), (2, 1)): False
  • после ((4,2), (3, -3)): верно
  • после ((4,2), (-2, -5)): правда
  • после ((4,2), (-4, -2)): неверно

Ответы [ 4 ]

13 голосов
/ 28 мая 2010
def after(u, v):
    # return sign of cross product
    return u[0]*v[1]<u[1]*v[0]

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

0 голосов
/ 28 мая 2010

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

Помните три правила из старших классов средней школы? "SOH CAH TOA" звонят какие-нибудь колокола? Вот что они имеют в виду:

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

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

SOH:

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

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

CAH:

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

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

TOA:

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

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

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

0 голосов
/ 28 мая 2010

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

0 голосов
/ 28 мая 2010

Общая идея: поверните ось x, чтобы она совпала с v, и проверьте, что новая координата y для u положительна.

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