如何在Matlab中生成这个形状?

Jac*_*Lee 3 matlab cluster-analysis k-means

在matlab中,如何生成两个随机点集群,如下图所示.你能告诉我脚本/代码吗?

目标形状

Ego*_*gon 6

如果要生成此类数据点,则需要使其概率分布能够生成点.

对于你的观点,我没有真实的分布,所以我只能给出一个近似值.从你的图中我看到它们大致位于一个圆上,具有随机半径和角度的有限跨度.我假设这些角度和半径均匀分布在一定范围内,这似乎是一个非常好的起点.

因此,在极坐标(即角度和半径)中生成随机数据而不是笛卡尔坐标(即水平和垂直)也是有意义的,并将它们转换为允许绘图.

C1 = [0 0];   % center of the circle
C2 = [-5 7.5];
R1 = [8 10];  % range of radii
R2 = [8 10];
A1 = [1 3]*pi/2; % [rad] range of allowed angles
A2 = [-1 1]*pi/2;

nPoints = 500;

urand = @(nPoints,limits)(limits(1) + rand(nPoints,1)*diff(limits));
randomCircle = @(n,r,a)(pol2cart(urand(n,a),urand(n,r)));

[P1x,P1y] = randomCircle(nPoints,R1,A1);
P1x = P1x + C1(1);
P1y = P1y + C1(2);

[P2x,P2y] = randomCircle(nPoints,R2,A2);
P2x = P2x + C2(1);
P2y = P2y + C2(2);

figure
plot(P1x,P1y,'or'); hold on;
plot(P2x,P2y,'sb'); hold on;
axis square
Run Code Online (Sandbox Code Playgroud)

这会产生:

结果

当您处理可以轻松转换的分布以及何时可以轻松描述点的可能位置时,此方法的效果相对较好.如果不能,还有其他方法,如逆变换采样方法,它提供生成数据的算法,而不是像我在这里做的手动变量转换.