Создайте точку в сфере определенного радиуса, которая находится вокруг КОНКРЕТНОЙ заданной точки (не в 0,0,0) - Python - PullRequest
0 голосов
/ 25 июня 2018

У меня есть функция, которая создает равномерную случайную точку внутри сферы определенного радиуса:

radius = 5
r = radius * ( numpy.random.random()**(1./3.) )  
phi = numpy.random.uniform(0,2*numpy.pi) 
costheta = numpy.random.uniform(-1,1) 
theta = numpy.arccos(costheta) 
x = numpy.sin(theta) * numpy.cos(phi) 
y = numpy.sin(theta) * numpy.sin(phi)
z = numpy.cos(theta)
point = numpy.array([x, y, z]) * r`

Однако я пытаюсь выяснить, как получить генерируемую точку, чтобы она находилась в пределахсфера, которая находится вокруг конкретной точки в пространстве, а не там, где она генерируется в данный момент в районе 0,0,0 .Я совсем не разбираюсь в математике, поэтому не знаю, как это сделать.Существует множество примеров того, как создать случайную точку в сфере определенного радиуса (например, Создать случайную точку в круге (равномерно) , но я не видел ни одного в Python, где указано, каксделать это в радиусе, который находится вокруг указанной пользователем точки (или, может быть, я просто неправильно понимаю математику, которая используется ...).

Был один вопрос, на который был задан / дан ответ (сгенерировать случайный кластер точек вокруг данной точки python ), но это не очень помогло, были некоторые другие похожие вопросы, но они были либо на Java, либо на C # (т.е. Произвольно генерировать кластеризованные точки по центрукоординаты в 3D ).

Я нарисовал простой рисунок того, что у меня есть сейчас (слева) и что я пытаюсь сделать (справа). differentOrigin

Любая помощь или примеры будут с благодарностью !!

1 Ответ

0 голосов
/ 25 июня 2018

Ты действительно слишком много думаешь об этом.Это проще продемонстрировать в 2D, и логика та же:

enter image description here

На рисунке выше у нас есть круг с центром в (0, 0), и точка, расположенная в (0, 1).

Теперь, давайте центрируем круг в (1, 1) и переместим точку в ту же относительную позицию:

enter image description here

Новый центр нашего круга - (1, 1), и точка теперь находится в (1, 2).Все, что вам нужно сделать, чтобы получить это преобразование:

1 + 0 = 1      # new_center_x + point_x
1 + 1 = 2      # new_center_y + point_y

Это действительно так просто!

Теперь numpy имеет встроенную функциональность, чтобы сделать это еще проще, потому что вы можете простодобавить массивы NumPy.Поэтому, если у вас есть новый центр и начальная точка, вы можете рассчитать новую точку следующим образом:

new_center = np.array([1, 1])
original_point = np.array([0, 1])
new_center + original_point
# array([1, 2])

Это легко переводит в трехмерные поверхности:

enter image description here

Здесь мы имеем сферу с центром в (0, 0, 0) и точку в (0, 0, 10).Мы можем использовать ту же логику, чтобы переместить этот круг в центр (5, 5, 5), при этом точка все еще будет в той же относительной позиции:

new_center = np.array([5, 5, 5])
original_point = np.array([0, 0, 10])
new_center + original_point
# array([ 5,  5, 15])

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...