matlab 如何在指定圆域中生成随机数

比如指定圆域为 x^2+y^2<r
如何仅仅在这个区域内生成均匀随机数?要保证足够均匀~~
尝试过以下两种方法:1)先生成方形区域随机数再截取:(主干)
ran=rand(1000);ran2=(ran-0.5)*2*r;for i=1:1000 for j=1:1000
if r^2>ran2(i)^2+ran2(j)^2 plot(ran2(i),ran2(j),'r') hold on end endend
2)生成圆域内任意圆上的随机点:
a1=2*pi*rand(1,1000);r1=r*rand(1,1000);x=sin(a1).*r1;
y=cos(a1).*r1;a2=0:2*pi/100:2*pi;plot(r*sin(a2),r*cos(a2),'-b',x,y,'or')

结果为以下两张图,因为算法本身缺陷,无论1)2)都不够均匀,有高手有更好的方法吗?(满意答案追加)

%算法为:
%1)在指定圆的最小外切正方形内均匀布n个点
%2)删除圆外的m个点
%3)重复1、2步骤,每次重复1时的布置点数n为上一次删除点数m
%因为正方形的面积与圆面积之比为pi/4约为0.75
%循环第二次时删除的点数m就仅为0.0625*需要点数,收敛快。
n=1000;%总点数
r=5;%半径
x=2*r*rand(1,n)-r;%开始构造随机点
y=2*r*rand(1,n)-r;
index=find(x.^2+y.^2>r.^2);
len=length(index);
x(index)=[];
y(index)=[];
while len
xt=2*r*rand(1,len)-r;
yt=2*r*rand(1,len)-r;
index=find(xt.^2+yt.^2>r.^2);
len=length(index);
xt(index)=[];
yt(index)=[];
x=[x xt];
y=[y yt];
end
plot(x,y,'ro')
axis equal
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-12-28

本视频展示如何用matlab绘制散圆状态图,可用于相关科研数据绘图!

相似回答