在已知半径的同心圆之间绘制数据

时间:2015-10-06 10:48:46

标签: matlab random geometry

我有一个1000个随机数的向量偏向540和600的边界。我需要将这些数据绘制为分别在半径540和600的两个同心圆之间的扭曲圆形路径。我该怎么做呢? 目前,我能够绘制给定半径的同心圆,但是如果我试图绘制在边界540和600之间的给定随机数据,则沿着两个同心圆之间的宽度绘制。我希望它被绘制成同心圆之间的嘈杂圆形曲线。 我希望我能够解释我的观点 如果有人能告诉我,我该怎么做。感谢

这是我上一篇文章的链接,其中我必须生成偏向两个定义良好的边界的随机数 Generating random numbers in matlab biased towards the boundaries 现在我需要绘制相同的数据,如上所述。

这是我得到的图像:

enter image description here

1 个答案:

答案 0 :(得分:0)

你真正想要的是一个圆形的情节,所以我想到的第一个想法是使用极坐标。

首先,我们将大约1000个随机数据的样本偏向that之后[540 600]间隔的范围。

请注意,此算法并不总能获得1000个值,因为删除了超出范围的值。

所以我们会这样做:

%Get the size of the sample

P=length(X);

% Generate P Angles uniformly distributed between 0 and 2*pi*(P-1)/P
% Note generating an angle equal to 0 and an angle equal to 2*pi would
% mean that we have 2 points with the same angle, and that s something
% you generally want to avoid 

Angles=(0:P-1)*(2*pi/P);

% Plot your points with the markers (polar coordinates) in '-+', 
% - means that you want a line to be drawn between the points and
% + means that you want a + marker on every point

plot(X.*cos(Angles),X.*sin(Angles),'-+');

%tell matlab to wait so you can add the circles

hold on

% add circle of 540 radius

plot(540*cos(Angles),540*sin(Angles),'-r');

%add circle of 600 radius

plot(600*cos(Angles),600*sin(Angles),'-r');

最终结果:

enter image description here

更新:关于让角度随机分布

我们必须不同地定义我们的角度。我们仍然需要一个长度为P的向量,但随机分布。这可以通过取0和1之间的P个随机数,然后将该矢量乘以2 * pi来实现,以获得0到2 * pi之间的随机分布值。 最后一步是订购此向量以保持数据的排序。

Temp=rand(1,P)*2*pi;
Angles=sort(Temp);

最终结果:

enter image description here

另一个领导者需要取1000个高斯随机数的样本并使用它们模2 * pi:

Angles=sort(mod(randn(1,P)*2*pi,2*pi));