У меня имеется
N ненулевых векторов
a с индексом в пространстве размерности тоже
N:

Пусть для начала они все линейно независимые (чтобы не возиться с вырожденными случаями, пока задача не решена), то есть образуют базис. Если рассмотреть множество точек, являющихся концами вектора
x линейной комбинации этих исходных векторов с неотрицательными коэффициентами, то получится конечно порождённый конус
K с вершиной в начале координат:

Теперь, у меня также имеется вектор
b:

Требуется выяснить: принадлежит ли точка, задаваемая этим вектором
b конусу
K?
Я знаю, что существует лемма Фаркаша об альтернативе, которая как раз рассматривает этот вопрос в самом общем случае. Однако, она предоставляет
критерии для проверки, типа "если да, то существует то-то, если нет, то существует кое-что другое", но не говорит как найти эти "то" и "кое-что", являющиеся свидетелями того или другого случая. Для поиска придётся воспользоваться линейным программированием. Но решать задачу ЛП для моего примитивного случая, когда количество базовых векторов равно (или даже меньше, если они ЛЗ) размерности пространства, кажется как-то уж через чур. Я подозреваю, что в этом простом виде задачу можно решить методами базовой линейной алгебры и/или аналитической геометрии.
Например, в случае плоскости, всё совсем элементарно. Надо проверить, что угол, который составляет вектор
b с базовыми векторами
a меньше (или равен) углу между этими векторами:

Здесь и далее длина всех векторов нормирована на единицу, а круглые скобки означают скалярное произведение двух векторов.
Случай трёхмерного пространства заметно сложнее. Первое, что приходит на ум — это найти вектор
c, который лежит строго внутри конуса, например, взяв сумму базовых векторов
a с весом 1:

А затем проверить, что вектора
b и
c лежат по одну сторону от каждой плоскости трёхгранного угла, ограничивающего конус
K:

Здесь
n с индексом — это вектора-нормали к каждой из плоскостей, которые можно вычислить, например, взяв векторное произведение двух базовых векторов
a с соответствующими индексами. Вектора в этих неравенствах можно не нормировать, так для проверки важен только знак.
Этот подход кажется обобщаемым на случай произвольной размерности, однако не совсем понятно, как именно это делать, особенно в плане вычисления векторного произведения. Вернее, тут надо искать нормаль к каждой гиперграни гипергранного угла, и я не понимаю, как это делать.
Задача является вычислительно-прикладной с высокой степенью задействованности (читай: крутится внутри самого внутреннего цикла), поэтому очень важно, чтобы она считалась быстро. Подскажите, пожалуйста, есть ли какие-то более оптимальные в вычислительном плане подходы (ну, или хотя бы просто другие подходы)?