Вычисление угла между векторами с использованием вектора в качестве опорной точки:
Я пытался найти быстрый алгоритм вычисления всех углов между 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
из них.