2d ızgara haritasında yol / nehir üretimi


12

Bu yeni bir soru, ama işte gidiyor:

Haritam 2d ızgara ve yollar ve nehirler oluşturmak istiyorum. Başlangıç ​​noktasından bitiş noktasına kadar olan güzergah döşemelerin sayısında en uygun güzergah olmamalıdır. Bunun yerine, belirli bir rastgele seviyeye (dönüşlere) sahip olmalıdırlar.

Bu tür şeyler için standart bir algoritma var mı?

Şerefe!

GÜNCELLEME:

Bu, ızgarada ağırlıklarla oynamanın ve jgrapht kütüphanesini kullanarak en kısa yol algoritmasının (Bellman-Ford) uygulanmasının sonucudur. Ne de olsa Donutz'un cevabı ile gittim.

http://pastebin.com/AGQGK5ik


Harita üzerinde herhangi bir engel var mı?
MichaelHouse

Henüz değil, nehir ilk yerleştirilecek engel olacak.
Markos Fragkakis

Yanıtlar:


18

A * kullanarak en uygun yolu oluşturabilir, sonra orta nokta yer değiştirmesiyle deforme edebilirsiniz.

resim açıklamasını buraya girin

Bu, uç noktalarınızın karşılanmasını sağlar ve rastgelelığı büyük ölçüde kontrol etmenizi sağlar. Örneğin, yolları nehirler kadar rasgele sıralamam. İstihbarat yolları inşa eden her ne olursa olsun, genellikle bu konuda optimal olmaya çalışır.

Haritanızda engeller varsa, her yinelemeden sonra bu engellerden geçmediğinizi kontrol ettiğinizden emin olun.

Başka bir yöntem , en uygun yolu bulduktan sonra Perlin gürültüsü oluşturmak , daha sonra üretilen gürültüye göre puanlarınızı kaydırmak olacaktır. Örneğin, bu gürültüyü kullanarak:

resim açıklamasını buraya girin

Ardından en uygun yol kırmızı ile ve kaydırılan yol mavi ile gösterin:

resim açıklamasını buraya girin

Değişen yolun gürültünün daha karanlık alanlarına nasıl "yerleştiğine" dikkat edin. Aynı şekilde bir nehir bir vadiden akabilir.

Perlin gürültü seçiminin bir yararı, engellerinize etki edebilmeniz ve algoritmanın bir parçası olarak bunlardan kaçınabilmenizdir.


1
Bu noktayı gürültüye göre nasıl değiştiriyorsunuz?
Khoi

1
Gürültüyü ve oluşturulan hattı nasıl sakladığınıza bağlıdır. Önce merkezdeki hatta en yakın / en düşük gürültüyü, sonra merkez ile uçlar arasındaki orta noktalarda vb. Bulabilirsiniz.
MichaelHouse

3

A * algoritması ayrıca döşemelere uygunluklarını gösteren değerler atamanıza da olanak tanır. Örneğin, nehirler için düşük araziye, yollar için düz araziye (ancak bataklık değil) en düşük maliyet puanlarını atayabilir ve buna dayalı olarak üretebilirsiniz. Bu size en kısa rotayı vermez, ancak size en verimli rotayı verir. Döşeme değerlerinize biraz rastgelelik uygulayın ve bazı en uygun olmayan rotaları elde edin.


2

Yüksekliğin bir faktör olduğu zaman ne olacak? Elmas kare algoritmasıyla yükseklik haritası yapabilirim. Her bir karoya biraz rastgele su eklemeyi ve sonra tüm yerleşinceye kadar suyu tekrar tekrar yükseltmeyi ve daha düşük yüksekliklere taşımayı düşünüyordum, ama bu yavaşlayacak ve muhtemelen nehirleri değil göller yapacaktı.

Ayrıca her bir karo için normallere bakmayı düşünüyordum. Eğer 2 normal birbirini gösteriyorsa, o zaman bir vadi olmalıdır. Bir vadide su toplanacaktı. Aynı yöne veya birbirinden uzağa işaretlerse, su toplanmaz. Bu muhtemelen yineleme yönteminden daha hızlı olacaktır, ancak göl yapamayabilir, sadece nehirler yapabilir. Her bir fayans noktasını birbirine doğru bir nehre çevirmekten kaçınmak için onunla oynamak zorundayım.


Her bir karoya ağırlık ekleyebileceğiniz belgelerden birini okudum, ayrıca bazı karolar geçilmez.
Joe Plante
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.