Matlab:如何在具有特定半径

时间:2016-03-21 12:07:47

标签: algorithm matlab

我希望在模拟中构建一系列点。

点密度为1/1000立方公尺

这些点的形状就像真实的建筑物一样(圆形或矩形或其他东西) 为了达到现实,这些形状不应重叠。 问题是如何生成这些建筑物的中心点?

我试过这个

clusterNumber = round((pi*areaRadius^2)/1000); 

radius = unifrnd (0,areaRadius,clusterNumber,1);
angle = unifrnd (-pi,pi,clusterNumber,1);

for i=1:clusterNumber
Coordinate(i,1) = cos(angle(i))*radius(i); % x
Coordinate(i,2) = sin(angle(i))*radius(i); % y

结果显示出我的预期......它确实有效 当我使用scatter时,它表明了 simulation image

所以,我的问题是如何在特定的圆圈中生成非均匀和不重叠的圆形或矩形。

1 个答案:

答案 0 :(得分:0)

如果您希望建筑物不相交,则必须先检查已建造建筑物的交叉点,然后再在随机位置创建建筑物。

当然,如果您创建了许多建筑物,碰撞检测将会很昂贵。您可以通过有效的最近邻搜索加快速度,例如使用kd-trees或在建筑空间中创建精细网格,以便只检查几个相邻单元格。

强加建筑物不得交叉的条件也会改变您的分布。您将不再在圆圈中心显示已标记的群集。你仍然会产生随机的位置,但随着你的区域变得越来越多,它们中的大多数将被拒绝。

以下是分发示例:

Non-intersecting circles

执行标准也可能会影响您的算法:限制随机gerenated位置的数量可能是一个好主意,这样当你不能再放置任何建筑物时或者当没有建筑物时,你就不会遇到无限循环找到合适空间的概率非常低。