我希望在模拟中构建一系列点。
点密度为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
时,它表明了
所以,我的问题是如何在特定的圆圈中生成非均匀和不重叠的圆形或矩形。
答案 0 :(得分:0)
如果您希望建筑物不相交,则必须先检查已建造建筑物的交叉点,然后再在随机位置创建建筑物。
当然,如果您创建了许多建筑物,碰撞检测将会很昂贵。您可以通过有效的最近邻搜索加快速度,例如使用kd-trees或在建筑空间中创建精细网格,以便只检查几个相邻单元格。
强加建筑物不得交叉的条件也会改变您的分布。您将不再在圆圈中心显示已标记的群集。你仍然会产生随机的位置,但随着你的区域变得越来越多,它们中的大多数将被拒绝。
以下是分发示例:
执行标准也可能会影响您的算法:限制随机gerenated位置的数量可能是一个好主意,这样当你不能再放置任何建筑物时或者当没有建筑物时,你就不会遇到无限循环找到合适空间的概率非常低。