python实现球体内均匀采样
1.参考资料
参考了这篇用matlab实现的博客:
https://blog.csdn.net/qq_39709535/article/details/88936451
使用了python的random库中random.uniform()随机正态浮点数
2.code
import random
from mpl_toolkits import mplot3d
import numpy as np
import math
import matplotlib.pyplot as plt
%matplotlib inline
ax=plt.axes(projection="3d")
N=501
z=[]
x=[]
y=[]
r=[]
angle1=[]
angle2=[]
for i in range(1,N+1):
if(True):
r.append(math.pow(random.uniform(0,1),1/3))
rline=np.array(r)
for i in range(1,N+1):
if(True):
angle1.append(random.uniform(0,1)*2*math.pi)
angle_1=np.array(angle1)
for i in range(1,N+1):
if(True):
angle2.append(math.acos(random.uniform(0,1)*2-1))
angle_2=np.array(angle2)
for i in range(1,N+1):
if(True):
x.append(rline[i-1]*math.cos(angle_1[i-1])*math.sin(angle_2[i-1]))
xline=np.array(x)
for i in range(1,N+1):
if(True):
y.append(rline[i-1]*math.sin(angle_1[i-1])*math.sin(angle_2[i-1]))
yline=np.array(y)
for i in range(1,N+1):
if(True):
z.append(rline[i-1]*math.cos(angle_2[i-1]))
zline=np.array(z)
ax.scatter3D(xline,yline,zline,s=3)
plt.savefig("D:\\samples\\球内采样.png")