Gezinme ağında “görüş hattı” yolu


9

Bir gezinti ağında görüş hattını hesaplamak istiyorum.

Aşağıdaki görüntüyü göz önünde bulundurun, sarı çizgi sadece A * 'nın, kırmızı çizgi ise sarı çizgiyi giriş olarak kullanan bir görüş çizgisi algoritmasının sonucudur. Şimdi ünite doğrudan “zig-zagging” olmadan hareket edebilir.

Bu "görüş hattını" hesaplamak için bir algoritma nedir?

resim açıklamasını buraya girin

Yanıtlar:


6

Bir dönüşüm hunisi algoritması arıyorsunuz.

İşte basit birisin

http://digestingduck.blogspot.com.es/2010/03/simple-stupid-funnel-algorithm.html

Temel olarak, algoritma kenarları portal olarak tanımlar ve huninin içinde olup olmadıklarını kontrol etmek için kenarların tepe noktasına karşı test edilen bir huni oluşturur.

A adımında, huni başlangıç ​​konumu ve portal sarı çizgiyle kesişecek şekilde yapılır.

B adımında, bir sonraki portal kontrol edilir, üst tepe huninin içinde yer alır, bu yüzden huni üst çizgisi şimdi oradan geçer. Ancak alt köşe huni dışındadır, çünkü yeşil çizginin altındaki kırmızı çizgi, bu nedenle alt çizgi geçmez, önceki portalın alt tepe noktasından geçmeye devam eder.

Huni kontrol edilebileceği gibi, huninin oluşturulması mümkün olmayan F adımına kadar daha küçük ve daha küçük olacaktır, çünkü kırmızı çizgi kötü bir huni oluşturur, bu nedenle üst köşe yeni başlangıç ​​noktası olarak seçilir ve yeni bir huni bitiş noktası o kafes içinde değilse inşa edilmelidir.

resim açıklamasını buraya girin

Bu tür bir algoritmanın model boyutu sorununa da basit bir çözüm sağladığını anlayın, çünkü portalların modelinizin 2xradius kadar küçük olduğunu düşünebilirsiniz.

resim açıklamasını buraya girin


6

Bu görüş hattı fikrini kullanarak oluşturulan yollarla kullanılabilecek basit bir teknik var. Temel olarak, yolu yürümek istiyorsunuz ve her bir düğümde, görünür olup olmadığını görmek için sondan önceki iki düğüme "geriye bakın" . Sondan önceki düğüm görünürse, son düğümü kaldırabilirsiniz (geçerli düğümünüz ile sondan önceki düğüm arasında görüş hattı bulunduğundan, ara düğüm olan son düğüm gerekli değildir).

resim açıklamasını buraya girin

Bir Gamasutra makalesinde aşağıdaki sözde kod örneği vardır:

checkPoint = starting point of path
currentPoint = next point in path
while (currentPoint->next != NULL)
if Walkable(checkPoint, currentPoint->next)
// Make a straight path between those points:
temp = currentPoint
currentPoint = currentPoint->next
delete temp from the path
else
checkPoint = currentPoint
currentPoint = currentPoint->next

Bu algoritma istediğiniz gibi yapar, burada Walkableişlev aslında bir görüş hattı işlevidir, ancak yolun görülebildiği, ancak yürünemediği durumları (çukurlar, tuzaklar, kısıtlı bölgeler) de içerecek şekilde hafifçe iyileştirilmiştir.


Ne dediğini anlıyorum, ancak görüş hattını nasıl hesaplayacağımı hala bilmiyorum. Üçgen gezinme ağını kullanarak Yürünebilir işlevinde ne olacağını açıklayabilir misiniz?
Yannick Lange

Bu yanıt ızgara tabanlı yollama ile ilgilidir ve bir navigasyon ağ senaryosunda işe yaramaz
Blau
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.