2015-09-27 177 views
2

我必須在MATLAB中創建公路場景。我必須在公路上生成隨機點(即車輛)。通過使用randn()命令,隨機點彼此重疊。我想生成隨機點,以保持隨機點之間的最小距離。生成N個隨機點,它們之間有一定的預定義距離

任何人可以幫助我產生這種情況的..

+0

對於R²,如果您想保持純粹的均勻分佈,我不知道任何比[拒絕抽樣](https://en.wikipedia.org/wiki/Rejection_sampling)更好的方法。是否需要統一分配?你的情況有多大?對於大型場景,拒收採樣可能會變慢。 – Daniel

+0

情景:長度爲L的公路(L值可以從3000米到10,000米不等)。公路可以有多條車道。我必須在公路上隨機生成車輛,以保持兩輛車之間的最小距離。車輛數量從10輛到500輛不等。我認爲車輛將統一分配。如果我們可以使用其他的車輛配送,請告訴我。 – reena

回答

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') 
+1

這不是拒絕方法,它不會以相同的概率生成所有可能的事件,但它可能非常接近它。拒絕方法會拒絕並重新生成所有點,直到一套符合要求。 – Daniel

+0

@Danial感謝您的澄清。糾正我,如果我錯了,但真正的拒絕抽樣會比我的方法慢得多。 –

+1

特別是當拒絕的概率很高時,它會慢得多。 – Daniel

1

你可能會考慮泊松盤(又稱盤)採樣。基本上,泊松盤採樣產生的是緊密堆積的點,但彼此之間的距離不超過指定的最小距離,從而產生更自然的圖案。

我MATLAB是生鏽的,對不起,沒有代碼,但鏈接

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

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

+0

這可能是非常大的問題。 – Daniel

+0

@severin:Danial是對的.Poisson磁盤是針對大問題的。我嘗試了鏈接http://cusacklabcomputing.blogspot.ca/2013/07/poisson-disc-2d-in-matlab.html上的泊松磁盤。它產生大量我不需要的數字。我需要改變保持仿真區域不變的車輛數量。 – reena

相關問題