圆内分布随机点.docx
圆内分布随机点N=1e5;x1=1;y1=0.5;rc=2; %Define parameters a=2*pi*rand(N,1); r=rand(N,1); x=rc*sqrt(r).*cos(a)+x1; y=rc*sqrt(r).*sin(a)+y1; plot(x,y,'.','markersize',1) N=1e5;x1=1;y1=0.5;rc=2 ; %Define parameters a=2*pi*rand(N,1); r=rand(N,1); x=sqrt(rc)*r.*cos(a)+x1; y=sqrt(rc)*r.*sin(a)+y1; plot(x,y,'.','markersize',1) 这段代码随机数离圆心越远越稀疏。这是为什么呢? 差异就在于是对随机数r开根号还是对常数rc开根号。可以用计算随机分布函数的办法推导得到: 若rU(0,1), aU(0,2pi), x=sqrt(r)cos(a), y=sqrt(r)sin(a), 则x,y在其定义域内服从均匀分布。 具体推导过程就算了,好久没有做过这种事情,推不动了。 在单位圆内生成N个点,且有x%的点标记为in-group,剩下1-x%的点标记为out-group。然后将单位圆分成三个区域, 0<半径<=1/3的区域内有n%的点标记为aa; 1/3<半径<=2/3的区域内有m%的点标记为bb; 2/3<半径<=1的区域内有f%的点标记为cc; %x,n,m,(f=1-m-n£©Èç¹ûÊǸø¶¨µÄ N=30;x=0.4;n=0.2;m=0.3;f=1-m-n; aaa=;bbb=;ccc=; %ͼÐÎÏÔʾµÄÇ°ÆÚ N=30;x=0.4;n=0.2;m=0.3;f=1-m-n; ezplot('x2+y2=1') axis(-1.1,1.1,-1.1,1.1) axis equal; title('') hold on ezplot('x2+y2=(1/3)2') ezplot('x2+y2=(2/3)2') title('') %Êý¾Ý²úÉú n1=round(N*x); n2=N-n1; % ÄãÕâ¸öin group ºÍout groupµÄÇø±ðÔÚÄÄÀïÄØ£¿Òâ˼ÊÇÇø·ÖËüÃǵÄÊÇʲô % aa,bb,ccÎÒÖªµÀËûÃÇÇø±ðÊÇÔÚ²»Í¬µÄÔ²»òÕß»·ÀïÃæ¡£ % in group ºÍout groupµÄ¶«Î÷¹ÃÇÒÊ¡È¥ naa=round(N*n), nbb=round(N*n); ncc=N-naa-nbb; i=1; while i<=naa xx=-1+2*rand(2,1); z=xx(1)2+xx(2)2; if z<=1/9 h1=plot(xx(1),xx(2),'g*'); i=i+1; aaa=aaa;xx(1),xx(2); else xx=; end end i=1 while i<=ncc xx=-1+2*rand(2,1); z=xx(1)2+xx(2)2; if z>4/9 & z<=1 h2=plot(xx(1),xx(2),'r*'); i=i+1; ccc=ccc;xx(1),xx(2); else xx=; end end i=1 while i<=nbb xx=-1+2*rand(2,1); z=xx(1)2+xx(2)2; if z>1/9 & z<=4/9 h3=plot(xx(1),xx(2),'b*'); i=i+1; bbb=bbb;xx(1),xx(2); else xx=; end end legend (h1 h2 h3,'aa','bb','cc') %ÄãÒªµÄÐźŴæÔÚÏÂÃæ±äÁ¿Àï aaa,bbb,ccc 如何在矩形区域生成400个不均匀分布的点,如在的区域生成300个点,在生成100个点 解:LZ 要得到的均匀分布应该是连续均匀分布吧?而并非离散均匀分布。所以,我用rand函数实现如下: z = 50*rand(1,300) 50+50*rand(1,100); 20*rand(1,400).'%注意.去掉后只生成一个点 scatter(z(:,1),z(:,2) 去掉.之后,运行结果为: 用matlab生成二维随机点 t=0:0.1:2*pi; plot(sin(t),cos(t); axis equal hold on A=-1+2*rand(2,500);%生成一个2行500列范围在的矩阵。 B=A(:,(A(1,:).2+A(2,:).2)<1);%筛选出圆内部的点,并将其分别赋给x,y x=B(1,:);%将矩阵B第一行的值赋给x y=B(2,:);%将矩阵B第二行的值赋给y plot(x,y,'r*')%分别以x,y为横纵坐标画点 三维图: figure X,Y = meshgrid(-8:.5:8); R = sqrt(X.2 + Y.2) + eps; Z = sin(R)./R; mesh(X,Y,Z) function h=rectA(x0,y0,w,h,A); % »-ÇãбµÄµÄ¾ØÐÎ % x0ÊÇÐýתǰ¾ØÐÎ×óϽǺá×ø±ê % y0ÊÇÐýתǰ¾ØÐÎ×óϽÇ×Ý×ø±ê % wÊÇ¿í¶È % hÊÇ¸ß¶È % AÊÇÐýת½Ç¶È X=x0,x0+w,x0+w,x0,x0; Y=y0,y0,y0+h,y0+h,y0; Z=X+Y*i; Z=Z-X(1)+Y(1)*i*exp(i*A)+X(1)+Y(1)*i; h=plot(Z); 输入h=rectA(0,0,3,4,60); 在指定矩形区域内分布随机点: >> rectangle('Position',1,2,4,6) >> A=1+4*rand(1,400); >> B=2+6*rand(1,400); >> x=A(1,:); >> y=B(1,:); >> plot(x,y,'ko') t=pi/2:pi/3:2.5*pi; r=2; plot(r*sin(t),r*cos(t); axis equal hold on t1=pi/2:pi/3:2.5*pi; t2=5*pi/6:2*pi/3:17*pi/6; t3=pi/2:2*pi/3:2.5*pi; t4=pi/2:pi:2.5*pi; t5=5*pi/6:pi:17*pi/6; t6=7*pi/6:pi:19*pi/6; x1=-0.5;x2=0.5; y1=-sqrt(3)/2:0.001:sqrt(3)/2; r=1; plot(r*sin(t1),r*cos(t1); axis equal hold on plot(r*sin(t2),r*cos(t2); hold on plot(r*sin(t3),r*cos(t3); hold on plot(r*sin(t4),r*cos(t4); hold on plot(r*sin(t5),r*cos(t5); hold on plot(r*sin(t6),r*cos(t6); hold on 随机点分布: t1=pi/2:pi/3:2.5*pi; t2=5*pi/6:2*pi/3:17*pi/6; t3=pi/2:2*pi/3:2.5*pi; t4=pi/2:pi:2.5*pi; t5=5*pi/6:pi:17*pi/6; t6=7*pi/6:pi:19*pi/6; t7=0:0.01:2*pi; r=1; plot(r*sin(t1),r*cos(t1),'r'); axis equal hold on A=-1+2*rand(2,200); B=A(:,(A(1,:).2+A(2,:).2)<1); C=B(:,(B(2,:)>-sqrt(3)/2)&(B(2,:)<sqrt(3)/2); C=C(:,(C(2,:)>-sqrt(3)*(C(1,:)+1)&(C(2,:)<-sqrt(3)*(C(1,:)-1); C=C(:,(C(2,:)>sqrt(3)*(C(1,:)-1)&(C(2,:)<sqrt(3)*(C(1,:)+1); x=C(1,:); y=C(2,:); plot(x,y,'b+')