Случайные числа в сфере

Этот пример показывает, как создать случайные точки в объеме сферы, как описано Knuth [1]. Сфера в этом примере сосредоточена в источник и имеет радиус 3.

Один из способов создать точки внутри сферы - задать их в сферических координатах. Затем можно преобразовать их в Декартовы координаты, чтобы построить их.

Во-первых, инициализируйте генератор случайных чисел, чтобы результаты в этом примере были повторяемыми.

rng(0,'twister')

Вычислите угол возвышения для каждой точки в сфере. Эти значения находятся в открытом интервале, (-π/2,π/2), но не равномерно распределены.

rvals = 2*rand(1000,1)-1;
elevation = asin(rvals);

Создайте азимутальный угол для каждой точки в сфере. Эти значения равномерно распределены в открытом интервале, (0,2π).

azimuth = 2*pi*rand(1000,1);

Создайте значение радиуса для каждой точки в сфере. Эти значения находятся в открытом интервале, (0,3), но не равномерно распределены.

radii = 3*(rand(1000,1).^(1/3));

Преобразуйте в Декартовы координаты и постройте график результата.

[x,y,z] = sph2cart(azimuth,elevation,radii);
figure
plot3(x,y,z,'.')
axis equal

Figure contains an axes. The axes contains an object of type line.

Если вы хотите разместить случайные числа на поверхности сферы, задайте постоянное значение радиуса, которая будет последним входным параметром sph2cart. В этом случае значение 3.

[x,y,z] = sph2cart(azimuth,elevation,3);

Ссылки

[1] Knuth, D. The Art of Computer Programming. Том 2, 3-й ред. Рединг, MA: Addison-Wesley Longman, 1998, pp. 134-136.

См. также

| |

Похожие темы