Generating uniformly random distribution of points inside a sphere
//// @param num number of points to be generated
//// @param Radius radius of sphere
Function UniformSphere(num,Radius)
Variable num,Radius
Make/O/N=(num) xw,yw,zw
Variable phi,theta,rr
Variable i
for(i = 0; i < num; i += 1)
phi = pi + enoise(pi)
theta = acos(enoise(1))
rr = Radius * ((0.5 + enoise(0.5))^(1/3))
xw[i] = rr * sin(theta) * cos(phi)
yw[i] = rr * sin(theta) * sin(phi)
zw[i] = rr * cos(theta)
endfor
DoWindow/K xyPlot
Display/N=xyPlot yw vs xw
ModifyGraph/W=xyPlot mode=3,marker=8
ModifyGraph/W=xyPlot width={Plan,1,bottom,left}
DoWindow/K yzPlot
Display/N=yzPlot zw vs yw
ModifyGraph/W=yzPlot mode=3,marker=8
ModifyGraph/W=yzPlot width={Plan,1,bottom,left}
DoWindow/K xzPlot
Display/N=xzPlot zw vs xw
ModifyGraph/W=xzPlot mode=3,marker=8
ModifyGraph/W=xzPlot width={Plan,1,bottom,left}
End
Forum
Support
Gallery
Igor Pro 10
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More
Also, to visualize the distribution why not display it in Gizmo:
Depending on the number of points you may want to either display them as a cloud or simply reduce the radius:
May 31, 2016 at 08:47 am - Permalink