Вычисление угла между векторами с использованием вектора в качестве опорной точки:

Я пытался найти быстрый алгоритм вычисления всех углов между n векторами, которые имеют длину х. Например, если x=3 и n=4, мои данные будут выглядеть примерно так:

A: [1,2,3]
B: [2,3,4]
C: [...]
D: [...]

Мне было интересно, допустимо ли найти угол между всеми векторами be (A,B,C,D) относительно некоторого фиксированного вектора (то есть X:[100,100,100,100]), а затем вычесть углы (A,B,C,D) найдено относительно этого фиксированного значения, чтобы найти угол между всеми ними. Я хочу сделать это, потому что мне нужно будет только вычислить угол один раз, а затем я могу вычесть углы всех моих векторов, чтобы найти разницу между ними. Короче говоря, я хочу знать, безопасно ли делать это предположение?

angle_between (A, B) == angle_between (A, X) - angle_between (B, X)

и функция angle_between - это косинусное сходство.

1 ответ

Решение

Этот подход будет работать только для двумерных векторов. Для более высоких измерений любые два вектора будут определять гиперплоскость, и только если третий (опорный) вектор также находится в этой гиперплоскости, ваш подход будет работать. К сожалению, вместо только расчета n углы и вычитания, чтобы определить углы между каждой парой векторов, вам нужно будет рассчитать все n choose 2 из них.

Другие вопросы по тегам