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

Для получения равномерно распределенных векторов в многомерном пространстве можно воспользоваться понятием сферических координат. Для начала можно сгенерировать равномерно распределенные углы в каждом измерении например,равномернораспределенныеуглывинтервалеот0до2πдлядвумерногопространстванапример, равномерно распределенные углы в интервале от 0 до 2π для двумерного пространстванапример,равномернораспределенныеуглывинтервалеот0до2πдлядвумерногопространства, а затем перевести их в декартовы координаты x,y,zдлятрехмерногопространстваx, y, z для трехмерного пространстваx,y,zдлятрехмерногопространства.

В Python можно воспользоваться библиотекой NumPy для генерации случайных углов и перевода их в декартовы координаты. Например, для трехмерного пространства и заданного количества векторов n:

import numpy as np
r = np.random.randnnn * 2*np.pi
theta = np.random.randnnn * np.pi
x = np.cosrrr * np.sinthetathetatheta y = np.sinrrr * np.sinthetathetatheta z = np.costhetathetatheta
vectors = np.vstack(x,y,z)(x, y, z)(x,y,z).T

Этот код сгенерирует n равномерно распределенных векторов в трехмерном пространстве. Для более высоких размерностей можно адаптировать этот подход, используя соответствующие формулы для перехода от сферических к декартовым координатам.

20 Апр 2024 в 13:21
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир