Как получить формулу равномерно распределенных векторов в многомерном пространстве? Прим.: заголовку особо не пугайтесь, просто не знаю (но хочу узнать), как это назвать по-общепринятому. Есть школьная задача: Сколько спиц в колесе, если угол между соседними спицами 20 градусов? У меня обратная задача и более общая Мне нужно найти, как могут быть равномерно расположены эти спицы (векторы), если известно их число n и известна размерность пространства r. То есть найти такие вектора. В двумерном пространстве (r=2) решить задачу легко: угол между каждой парой соседних векторов должен быть равен 360°/n Допустим: r = 2 (двумерное пространство, плоскость) n = 2 (нужно получить два вектора) Тогда на выходе получаем любые два противоположно направленных двумерных вектора. Например (0,1) и (0,-1) [6:00 утра на циферблате] Или (1,0) и (-1,0) [~9:15] Если n = 3, то это три вектора, которые, образно, разрезают пиццу на 3 равные части (с углами по 120 градусов между каждыми соседними парами векторов); если n = 4, то то на 4 равные части и тд. В трехмерном пространстве примерно то же самое, хотя сложнее понять какие из векторов, выходящих из одной точки , являются соседними А на многомерном пространстве (r>3) я просто застрял. Проблема в том, что я не знаю как кратко сформулировать вопрос, поэтому даже не понятно, с какой стороны подступиться. Замечу: не обязательно, чтобы векторы были одинаковой длины или пересекали одну точку (в примерах выше они использованы просто для наглядности). Но нужно получить набор векторов с конкретными координатами. Идеально, если есть какое-то решение на python (в конечном счете, я все равно буду реализовывать этот алгоритм на нем) Очевидно, решений будет бесконечно много даже для единичных векторов. Нужен алгоритм, как получить хотя бы 1 набор таких "равномерно распределенных" векторов То есть попробую еще раз сформулировать, но немного по-другому: Нужно получить набор векторов с равномерно разной направленностью. Если их представлять как числа, то это циклическая последовательность с одинаковым шагом Или равномерно распределенные точки на окружности и тд Как это можно сделать / в какую сторону копать?
Для получения равномерно распределенных векторов в многомерном пространстве можно воспользоваться понятием сферических координат. Для начала можно сгенерировать равномерно распределенные углы в каждом измерении (например, равномерно распределенные углы в интервале от 0 до 2π для двумерного пространства), а затем перевести их в декартовы координаты (x, y, z для трехмерного пространства).
В Python можно воспользоваться библиотекой NumPy для генерации случайных углов и перевода их в декартовы координаты. Например, для трехмерного пространства и заданного количества векторов n:
import numpy as np r = np.random.rand(n) * 2*np.pi theta = np.random.rand(n) * np.pi x = np.cos(r) * np.sin(theta) y = np.sin(r) * np.sin(theta) z = np.cos(theta) vectors = np.vstack((x, y, z)).T
Этот код сгенерирует n равномерно распределенных векторов в трехмерном пространстве. Для более высоких размерностей можно адаптировать этот подход, используя соответствующие формулы для перехода от сферических к декартовым координатам.
Для получения равномерно распределенных векторов в многомерном пространстве можно воспользоваться понятием сферических координат. Для начала можно сгенерировать равномерно распределенные углы в каждом измерении (например, равномерно распределенные углы в интервале от 0 до 2π для двумерного пространства), а затем перевести их в декартовы координаты (x, y, z для трехмерного пространства).
В Python можно воспользоваться библиотекой NumPy для генерации случайных углов и перевода их в декартовы координаты. Например, для трехмерного пространства и заданного количества векторов n:
import numpy as npr = np.random.rand(n) * 2*np.pi
theta = np.random.rand(n) * np.pi
x = np.cos(r) * np.sin(theta)
y = np.sin(r) * np.sin(theta)
z = np.cos(theta)
vectors = np.vstack((x, y, z)).T
Этот код сгенерирует n равномерно распределенных векторов в трехмерном пространстве. Для более высоких размерностей можно адаптировать этот подход, используя соответствующие формулы для перехода от сферических к декартовым координатам.