เส้นทาง“ เส้นสายตา” ข้ามตาข่ายนำทาง


9

ฉันต้องการคำนวณสายตาในตาข่ายนำทาง

พิจารณาภาพด้านล่างเส้นสีเหลืองเป็นผลลัพธ์ของ A * เท่านั้นและเส้นสีแดงเป็นผลลัพธ์ของอัลกอริธึมที่เห็น "ใช้เส้นสีเหลืองเป็นอินพุตตอนนี้หน่วยสามารถย้ายได้โดยตรงโดยไม่ต้อง" ซิกแซก "

อัลกอริทึมในการคำนวณ "เส้นสายตา" คืออะไร?

ป้อนคำอธิบายรูปภาพที่นี่

คำตอบ:


6

คุณกำลังมองหาอัลกอริทึมช่องทาง

ที่นี่คุณเป็นคนเรียบง่าย

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

โดยทั่วไปอัลกอริทึมระบุขอบเป็นพอร์ทัลและสร้างช่องทางที่ทดสอบกับจุดสุดยอดของขอบเพื่อตรวจสอบว่าพวกเขาอยู่ในช่องทางหรือไม่

ในขั้นตอน A ช่องทางจะถูกสร้างขึ้นด้วยตำแหน่งเริ่มต้นและพอร์ทัลข้ามผ่านเส้นสีเหลือง

ในขั้นตอน B มีการตรวจสอบพอร์ทัลถัดไปจุดสุดยอดด้านบนอยู่ในช่องทางดังนั้นตอนนี้บรรทัดด้านบนจะผ่านแม้ว่าจะอยู่ในขั้นตอนนี้ก็ตาม แต่จุดสุดยอดด้านล่างอยู่นอกช่องทางเพราะเส้นสีแดงอยู่ใต้เส้นสีเขียวดังนั้นเส้นด้านล่างจะไม่ผ่านแม้ว่ามันจะผ่านจุดสุดยอดด้านล่างของพอร์ทัลก่อนหน้า

ในขณะที่คุณสามารถตรวจสอบช่องทางจะเล็กลงและเล็กลงไปจนถึงขั้นตอน F ซึ่งเป็นไปไม่ได้ที่จะสร้างช่องทางเพราะเส้นสีแดงทำให้ช่องทางไม่ดีดังนั้นจุดสุดยอดด้านบนจึงถูกเลือกเป็นจุดเริ่มต้นใหม่ จะสร้างถ้าจุดสิ้นสุดไม่ได้อยู่ในตาข่ายที่

ป้อนคำอธิบายรูปภาพที่นี่

ตระหนักดีว่าอัลกอริทึมประเภทนี้จะช่วยให้แก้ปัญหาเรื่องขนาดของโมเดลได้ง่ายเนื่องจากคุณสามารถพิจารณาว่าพอร์ทัลมีขนาดเล็กลง 2 เท่าของโมเดลของคุณ

ป้อนคำอธิบายรูปภาพที่นี่


6

มีเทคนิคง่ายๆที่สามารถใช้กับเส้นทางที่สร้างขึ้นโดยใช้แนวคิดการมองเห็นแนวนี้ โดยทั่วไปคุณต้องการเดินพา ธ และที่แต่ละโหนดให้ "มองย้อนกลับ" สองโหนดก่อนหน้าสุดท้ายเพื่อดูว่าสามารถมองเห็นได้หรือไม่ หากมองเห็นโหนดก่อนหน้านี้ล่าสุดคุณสามารถลบโหนดสุดท้าย (เนื่องจากคุณมีเส้นสายตาระหว่างโหนดปัจจุบันของคุณและโหนดก่อนหน้าสุดท้ายโหนดสุดท้ายซึ่งเป็นโหนดระดับกลางไม่จำเป็นต้องใช้)

ป้อนคำอธิบายรูปภาพที่นี่

บทความ Gamasutraมีตัวอย่างรหัสเทียมต่อไปนี้:

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

อัลกอริธึมทำตามที่คุณต้องการโดยที่Walkableฟังก์ชั่นนั้นเป็นฟังก์ชั่นแนวสายตา แต่ได้รับการปรับปรุงเล็กน้อยเพื่อให้รวมถึงสถานการณ์ที่มองเห็นเส้นทางได้ แต่ไม่สามารถเดินได้ (เช่นหลุมดักกับดักโซนที่ จำกัด )


ฉันเข้าใจสิ่งที่คุณกำลังพูด แต่ฉันยังไม่รู้วิธีคำนวณสายตา คุณสามารถอธิบายสิ่งที่จะอยู่ในฟังก์ชั่น Walkable โดยใช้ตาข่ายนำทางสามเหลี่ยม?
Yannick Lange

คำตอบนี้เกี่ยวกับการกำหนดเส้นทางตามกริดและไร้ประโยชน์ในสถานการณ์การนำทางด้วยตาข่าย
Blau
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.