2010-12-02 13 views
7

Tıpkı başlıkta da görüldüğü gibi, bir dikdörtgeni rastgele şekilli çokgenlere bölmem gerekiyor. 7 poligona sahipRastgele şekilli çokgenlere bir dikdörtgen çizme

Örnek:

+--------+--------+ 
|\  | 2 | 
| \ 1 |''--..__| 
| ------| 5  | 
| 3/ \________| 
| / /\ 6 | 
|__/ 4/\______| 
| /7  | 
+-----+-----------+ 

zaten orada bunun için bir algoritma var mı bilmiyorum, ama bu kafamı almak gibi olamaz.

Özellikle hangi dilde cevap verdiğinizi umursamıyorum, ancak Java/Swing uygulamasında yapacağım.

+2

"Rastgele şekilli" çokgenler demek istemedim; Örneğinizdeki bu çokgenler rastgele değil. Çokgenlerin şeklini umursamadığın anlamına mı geliyor? Bu rasgele şekilliden farklı. –

+0

@McWafflestix: "Rasgele şekilli" ile ne demek istiyorsun peki? Yani, bu algoritmayı birden çok kez çalıştırırsanız, oluşturulan çokgenler her biri için farklı olacaktır. –

+0

"rastgele", kümenin diğer üyeleriyle hiçbir ilişkisi olmadığını gösterir; Belirttiğiniz şekilde ayrılmış bir dikdörtgen için, bazı üyelerin diğer üyelerle (örneğin, ortak kenar uzunluğu) bir ilişkisi vardır. –

cevap

13

Sen dikdörtgen rastgele puan demet bırakın ve Voronoi Diyagramı hesaplayabilir.

Here is a Java/Swing implementation.

Biraz örnek yaptım (ama using Mathematica değil, yukarıdaki uygulama)

alt text

alt text

alt text

HTH!

+0

+1 düşündüğümü düşünmek için +1. Voronoi parçalarının dışbükey olduğunu, orijinal örneğin içbükey parçaları olduğunu not edin. İçbükey olanları almak için birkaç Voronoi nöbeti rastgele birleştirebilirsiniz. – celion

+0

@celion "Rastgele şekilli" sadece sezgisel bir kavram ... ve Voronoi diyagramı sadece birkaç kenarı kaldırarak tuhaf şekiller elde etmek için güzel bir oyun alanı sunuyor. (ups! yine aynı düşünüyor: D) –

3

Tam dikdörtgenin üzerinde bir grup rasgele çizgi çizerim ve sonra her çizgi kesişimindeki çizgileri "bölerim", böylece temelde bir çeşit ağ çizgisine sahip olursunuz. Ardından istediğiniz sayıda poligona ulaşıncaya kadar istediğiniz kadar rastgele çizgi segmenti kaldırın.

Düzenleme: Yani örnek için bu satırları ekledikten sonra böyle olurdu:

+----+---+----+---+ 
|\'--.\_/| / | 
| \ X |''/-..__| 
|--\--+-\+-/------| 
|___\/___\/_______| 
| /\ /\  | 
|__/__\_/|_\______| 
|/ X | \  | 
++----+-++---+----+ 
+0

Bu bana [arıza algoritmasının] 2B versiyonunu hatırlatıyor (http://www.lighthouse3d.com/opengl/terrain/index.php3?fault). – Seth

+0

Bu konuda gördüğüm sorun, hangi satırların kaldırılacağını programsal olarak belirlemenin zor olmasıdır. Ayrıca, bu mümkün olursa ben kaçınmak istiyorum minik çokgenler üretmek için imkanı vardır. –

+0

Hata algoritmasını bilmiyordum, ama evet, gerçekten çok benzer! – Lucero

İlgili konular