生成N个随机点,它们之间具有一定的预定距离

时间:2015-09-27 16:18:43

标签: matlab random

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

任何人都可以帮助我制作这种场景..

2 个答案:

答案 0 :(得分:1)

您可以考虑泊松圆盘(a.k.a. disk)采样。基本上,泊松圆盘采样产生紧密堆积的点,但与指定的最小距离相比没有彼此更接近,从而产生更自然的图案。

我的matlab生锈了,抱歉,没有代码,但链接

http://www.cs.sandia.gov/~samitch/papers/cccg-present.pdf

https://www.jasondavies.com/poisson-disc/

答案 1 :(得分:1)

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

% 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')