Одно решение, которое вы можете использовать:
Что вам действительно нужно сделать, это создать плоскость, к которой один из векторов находится в одной плоскости.
Получение перекрестного произведения обоих векторов создаст плоскость, тогда вы получите нормаль к этой плоскости, вы можете получить угол между этим и вектором, для которого вам нужен угол со знаком, и вы можете использовать угол определить знак.
Если угол больше 90 градусов, то он ниже созданной плоскости; меньше 90 градусов и выше.
В зависимости от стоимости вычислений на этом этапе вместо угла может использоваться точечное произведение.
Просто убедитесь, что вы всегда вычисляете нормали по одному и тому же порядку векторов.
Это легче использовать, если вы используете оси XYZ, и это то, с чем вы сравниваете, поскольку у вас уже есть векторы, необходимые для плоскости.
Возможно, есть более эффективные решения, но это то, что я придумал.
Редактировать: уточнение созданных векторов
a X b = p
. Это перпендикулярно как a
, так и b
.
Затем выполните одно из следующих действий:
a X p
или b X p
для создания другого вектора, который является нормалью к плоскости, созданной двумя векторами. Выбор вектора зависит от того, для чего вы пытаетесь найти угол.