我必须在MATLAB中创建高速公路场景。我必须在高速公路上生成随机点(即车辆)。通过使用randn()命令,随机点彼此重叠。我想生成随机点,以保持随机点之间的最小距离。
任何人都可以帮助我制作这种场景..
答案 0 :(得分:1)
您可以考虑泊松圆盘(a.k.a. disk)采样。基本上,泊松圆盘采样产生紧密堆积的点,但与指定的最小距离相比没有彼此更接近,从而产生更自然的图案。
我的matlab生锈了,抱歉,没有代码,但链接
答案 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')