matlab 如何将所有的点都规定在圆的范围内。用正态随机生成器
3个回答
展开全部
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 广告
2024-07-18 广告
Excel表格中的计数函数主要用于统计单元格区域中满足特定条件的数值或非空单元格的数量。最常用的计数函数是`COUNT`和`COUNTA`。`COUNT`函数用于统计选定区域内数值型单元格的数量,忽略文本和空单元格。而`COUNTA`函数则...
点击进入详情页
本回答由TableDI提供
展开全部
更多追问追答
追问
那能否加个循环将圆外的点清除呢
追答
前些天刚好编了类似的代码(原来的是均匀分布),改写一下,供参考:
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
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把你的r=rand(N,1)改成r = (b-0).*rand(N,1)。b是你的圆的半径的大小。
追问
还是有点在外面,而且这里是randn。能否加个循环什么的,点在圆外就重新找点?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询