Как получить формулу равномерно распределенных векторов в многомерном пространстве? Прим.: заголовку особо не пугайтесь, просто не знаю (но хочу узнать), как это назвать по-общепринятому.
Есть школьная задача:
Сколько спиц в колесе, если угол между соседними спицами 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 набор таких "равномерно распределенных" векторов
То есть попробую еще раз сформулировать, но немного по-другому:
Нужно получить набор векторов с равномерно разной направленностью.
Если их представлять как числа, то это циклическая последовательность с одинаковым шагом
Или равномерно распределенные точки на окружности и тд
Как это можно сделать / в какую сторону копать?

21 Авг 2019 в 06:16
144 +1
0
Ответы
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 равномерно распределенных векторов в трехмерном пространстве. Для более высоких размерностей можно адаптировать этот подход, используя соответствующие формулы для перехода от сферических к декартовым координатам.

20 Апр в 13:21
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 436 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир