matlab 如何将所有的点都规定在圆的范围内。用正态随机生成器

 我来答
燕语莺莺脆呢p
2015-11-02 · TA获得超过338个赞
知道小有建树答主
回答量:205
采纳率:0%
帮助的人:219万
展开全部
x0 = 0;%圆心坐标
y0 = 0;
R = 10;%圆半径
N = 100;%需要生成的随机点个数
deta = 360.*rand(N,1);%随机角度
r = R.*rand(N,1);%随机半径
dx = r.*cosd(deta);%计算x坐标增量
dy = r.*sind(deta);%计算y坐标增量
nx = x0 + dx;%计算随机点x坐标
ny = x0 + dy;%计算随机点y坐标
%绘制结果
rectangle('Position',[x0-R,y0-R,2*R,2*R],'Curvature',[1,1])
hold on
plot(nx,ny,'r*')
hold off
axis([x0-1.2*R x0+1.2*R y0-1.2*R y0+1.2*R])
TableDI
2024-07-18 广告
Excel表格中的计数函数主要用于统计单元格区域中满足特定条件的数值或非空单元格的数量。最常用的计数函数是`COUNT`和`COUNTA`。`COUNT`函数用于统计选定区域内数值型单元格的数量,忽略文本和空单元格。而`COUNTA`函数则... 点击进入详情页
本回答由TableDI提供
tianxiawulang
推荐于2018-05-07 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2562万
展开全部
你的要求有问题。
正态分布无法确保随机数的范围——尽管在超过一定范围(例如3倍标准差)的概率很小,但毕竟是存在的。
而且,你用正态分布产生半径,也并不意味着点在圆内服从正态分布(正如用均匀随机数产生半径,并不会产生在圆内均匀分布的随机数)。
产生二维正态分布应该用 mvnrnd 函数。
至于说要保证点在圆内,那就只能是把落在圆外的少数点剔除,或者强制限制到圆内(直接放到边缘似乎不是好办法,可以考虑将其和圆心的距离对圆的半径取模)。
更多追问追答
追问
那能否加个循环将圆外的点清除呢
追答

前些天刚好编了类似的代码(原来的是均匀分布),改写一下,供参考:

N = 1000;
L = 4;
W = 2;
D = sqrt(L^2+W^2);
% 模拟
r = mvnrnd([0 0],[1 0; 0 1]*D/2/3,1000);
x = r(:,1);
y = r(:,2);
% 对圆外的点进行限制
R = sqrt(x.^2+y.^2);
t = atan2(y, x);
inx = R >= D/2;
R(inx) = mod(R(inx), D/2);
x = R .* cos(t);
y = R .* sin(t);
% 判断在球门范围内
inx = abs(x) <= L/2 & abs(y) <= W/2;
P = sum(inx) / N;
% 绘图
clf
t = linspace(0,2*pi,200);
plot(D/2*cos(t),D/2*sin(t),'linewidth',2);
hold on
patch([-1 1 1 -1]*L/2,[-1 -1 1 1]*W/2,'c','Facealpha',0.3)
plot(x(inx),y(inx),'go');
plot(x(~inx),y(~inx),'r*');
axis equal

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
优雅的温暧
2015-11-02
知道答主
回答量:7
采纳率:0%
帮助的人:2.9万
展开全部
把你的r=rand(N,1)改成r = (b-0).*rand(N,1)。b是你的圆的半径的大小。
追问
还是有点在外面,而且这里是randn。能否加个循环什么的,点在圆外就重新找点?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式