Для полноты картины приведу код MATLAB для точечного отбора. Он генерирует набор случайных точек в единичном кубе, удаляет точки, находящиеся за пределами единичной сферы, и масштабирует координаты вверх, чтобы заполнить сферу радиуса R
:
XYZ = rand(1000,3)-0.5; %# 1000 random 3-D coordinates
index = (sum(XYZ.^2,2) <= 0.25); %# Find the points inside the unit sphere
XYZ = 2*R.*XYZ(index,:); %# Remove points and scale the coordinates
Одним из ключевых недостатков этого метода отбора точек является то, что он затрудняет создание определенного количества точек. Например, если вы хотите создать 1000 точек внутри своей сферы, сколько вам нужно создать в кубе, прежде чем отбирать их? Если вы увеличите число точек, сгенерированных в кубе, в 6/pi
раз (т.е. отношение объема единичного куба к единичной сфере), тогда вы сможете приблизиться к количеству желаемых точек в сфере. , Тем не менее, поскольку мы имеем дело с (псевдо) случайными числами, в конце концов, мы никогда не можем быть абсолютно уверены, что будем генерировать достаточное количество точек, попадающих в сферу.
Короче говоря, если вы хотите сгенерировать конкретное количество точек, я бы попробовал одно из других предложенных решений. В противном случае решение для точечного отбора будет хорошим и простым.