2016-03-21 43 views
0

Simülasyonda bina olarak bir dizi nokta oluşturmak istiyorum.Matlab: tekdüze olmayan ve örtüşmeyen daire / dikdörtgen, belirli bir yarıçapı olan daire içine nasıl oluşturulur

Puan yoğunluk noktaları tıpkı gerçek binalar (Çember veya dikdörtgen veya başka bir şey) bir gerçekliğe ulaşabilmek için gibi onun şekle sahip 1/1000m^3

olduğunu, bu şekiller üst üste edilmemelidir. Soru, bu 'binaların' merkez noktasının nasıl oluşturulacağıdır?

Bu

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 

çalıştı ve beklediğim ... Bu in iş olarak bunu Yani simulation image

gösterdi scatter kullanıldığında sonuç gösterdi, sorum nasıl etmektir Belirli bir daire içinde eşit olmayan ve örtüşme olmayan daireler veya dikdörtgenler oluşturmak.

cevap

0

Binalarınızın kesişmemesini istiyorsanız, rastgele konumunuzu oluşturmadan önce önceden oluşturulmuş binaları olan kavşakları kontrol etmelisiniz.

Elbette, birçok bina oluşturursanız, çarpışma tespiti maliyetli olacaktır. Etkili bir en yakın komşu aramasıyla, örneğin kd-trees ile veya bina alanında ince bir ızgara oluşturarak, kontrol etmek için sadece birkaç komşu hücreniz olacak şekilde hızlandırabilirsiniz.

Binaların kesişmemesi gereken koşulların uygulanması da dağıtımınızı değiştirecektir. Artık dairenin merkezinde işaretlenmiş kümelenmeye sahip olmayacaksınız. Hala morre rastgele pozisyonlar üretiyorsunuz, ama bölgeniz daha kalabalıklaştıkça, çoğu reddedilecek.

Non-intersecting circles

da algoritma etkileyebilir kriterini Zorlamayı: Burada

bir örnek dağılımı var sen karışmayan böylece, rastgele gerenated pozisyonların sayısını sınırlamak için iyi bir fikir olabilir daha fazla bina yerleştirilemediğinde veya uygun bir yer bulma olasılığı çok düşük olduğunda sonsuz bir döngüdür.

İlgili konular