Matlab 生成N个随机点,这些点之间有一定的预定义距离

Matlab 生成N个随机点,这些点之间有一定的预定义距离,matlab,random,Matlab,Random,我必须在MATLAB中创建高速公路场景。我必须在高速公路上生成随机点(即车辆)。通过使用randn()命令,随机点彼此重叠。我想生成随机点,这样随机点之间的最小距离保持不变 有人能帮助我生成这种场景吗? < P>你可以考虑Poisson盘(A.K.A盘)采样。基本上,泊松圆盘采样产生紧密排列的点,但彼此之间的距离不超过指定的最小距离,从而形成更自然的模式 我的matlab生锈了,对不起,没有代码,但是链接 这不是一个优雅的解决方案,但它满足您的最小距离限制 % Highway dimensio

我必须在MATLAB中创建高速公路场景。我必须在高速公路上生成随机点(即车辆)。通过使用randn()命令,随机点彼此重叠。我想生成随机点,这样随机点之间的最小距离保持不变


有人能帮助我生成这种场景吗?

< P>你可以考虑Poisson盘(A.K.A盘)采样。基本上,泊松圆盘采样产生紧密排列的点,但彼此之间的距离不超过指定的最小距离,从而形成更自然的模式

我的matlab生锈了,对不起,没有代码,但是链接


这不是一个优雅的解决方案,但它满足您的最小距离限制

% Highway dimensions
lx = 1000;
ly = 1000;

% Minimum distance
d = 100;

% Number of points to generate
n = 50;

points = [rand(1, 2) .* [lx ly]];
d2 = d ^ 2;

% Keep adding points until we have n points.
while (size(points, 1) < n)

    % Randomly generate a new point
    point = rand(1, 2) .* [lx ly];

    % Calculate squared distances to all other points
    dist2 = sum((points - repmat(point, size(points, 1), 1)) .^ 2, 2);

    % Only add this point if it is far enough away from all others.
    if (all(dist2 > d2))
        points = [points; point];
    end
end

plot(points(:,1), points(:,2), 'o')
%公路尺寸
lx=1000;
ly=1000;
%最小距离
d=100;
%要生成的点数
n=50;
点数=[rand(1,2)。*[lx-ly]];
d2=d^2;
%继续添加点,直到我们有n个点。
而(尺寸(点,1)d2))
点数=[点数;点数];
结束
结束
绘图(点(:,1),点(:,2),‘o’)

对于R²,我不知道有哪种方法比保持纯粹的均匀分布更好。是否需要统一分发?您的场景有多大?对于大型场景,拒绝采样可能会变慢。场景:长度为L的高速公路(L值可以从3000米到10000米不等)。高速公路可以有多条车道。我必须在高速公路上随机生成车辆,以便保持两辆车之间的最小距离。车辆数量从10辆到500辆不等。我认为车辆将均匀分布。如果我们可以对车辆使用其他分布,请告诉我。这不是拒绝方法,它不会以相同的概率生成所有可能的事件,但它可能非常接近它。拒绝方法将拒绝并重新生成所有点,直到一组点符合要求为止。@Danial感谢您的澄清。如果我错了,请纠正我,但真正的拒绝采样将比我的方法慢得多。特别是在拒绝概率很高的情况下,它将慢得多。@Jeff Irwin:如果lx和ly相等,此代码将非常有效。如果我给出lx=1000和ly=10,则代码没有给出预期结果。
d
n
的值是多少?根据输入,可能无法将一定数量的车辆装载到给定区域。我确实用
lx=1000测试了我的代码;ly=700;d=100;n=50并且它按预期工作。这可能是解决非常大问题的方法。@severin:Danial是对的。Poisson磁盘用于解决大问题。我尝试了链接上给出的泊松磁盘。它产生了大量我不需要的数字。我需要改变车辆数量,保持模拟区域不变。