การสลายตัวของเซลล์ Boustrophedon เป็นเพียงการแบ่งสภาพแวดล้อมออกเป็นพื้นที่ซึ่งสามารถครอบคลุมได้อย่างมีประสิทธิภาพโดยเส้นทาง boustrophedon การสลายตัวแบบสี่เหลี่ยมคางหมูจะทำและสามารถทำได้โดยใช้อัลกอริทึมเส้นกวาด ดู [Choset 2000], เว็บไซต์
นี้หรือ (ฉันแนะนำ!) หนังสือดีเลิศ "เรขาคณิตเชิงคำนวณ" โดย Mark de Berg, และ al สำหรับคำอธิบายที่สมบูรณ์เกี่ยวกับโครงสร้างข้อมูลและอัลกอริธึมที่ต้องการ
Choset, โฮวี่ "ความครอบคลุมของพื้นที่ที่เป็นที่รู้จัก: การสลายตัวของเซลล์ Boustrophedon" หุ่นยนต์อิสระ , 2000
ตัวอย่างเช่นพิจารณาชุดของอุปสรรคเป็นขอบและจุดยอด สมมติว่าสภาพแวดล้อมนั้นล้อมรอบด้วยรูปหลายเหลี่ยมพิเศษ เรามีสิ่งต่อไปนี้ ในการย่อยสลายพื้นที่นี้เราเพียงแค่เพิ่มขอบแนวตั้งระหว่างทุกจุดยอดและเส้นที่ใกล้ที่สุดหรือจุดสุดยอด
เพื่อให้บรรลุผลในรหัสคุณต้องการเพียงการทดสอบการตัดกันของส่วนบรรทัดรายการเรียงขอบและรายการเรียงลำดับของจุดยอด
- จากทุกจุดยอดจากซ้ายไปขวาvi
- สร้างเส้นแนวตั้งที่แต่ละอันขยายจนขอบแรกหรือจุดสุดยอดตัดกันlivi
- ที่จุดตัดแต่ละจุดให้สร้างจุดสุดยอดใหม่
เมื่อทำสิ่งนี้เสร็จแล้วชุดของขอบและจุดยอดใหม่จะล้อมรอบรูปสี่เหลี่ยมคางหมูเท่านั้น แต่ฉันเน้นว่าคุณไม่สามารถทำสิ่งนี้ทางออนไลน์ได้ (โดยไม่ทราบล่วงหน้าเกี่ยวกับอุปสรรค) หากคุณต้องการความครอบคลุมที่แข็งแกร่งโดยที่คุณไม่รู้ตัวคุณอาจดูที่ "อัลกอริธึมบั๊ก" นี่เป็นอัลกอริธึมที่ง่ายโดยสมมติว่าสภาพแวดล้อมนั้นล้อมรอบ
จากตำแหน่งเริ่มต้นให้เลื่อนขึ้นและไปทางซ้ายจนกระทั่งถึงมุมบนซ้ายของสภาพแวดล้อม หากคุณพบอุปสรรคก่อนคุณต้องเดินทางไปรอบ ๆ คุณรู้ว่าบางสิ่งบางอย่างเป็นอุปสรรคถ้ามันสามารถ circumnavigated (ชนและย้าย)
จากด้านบนซ้ายให้เลื่อนไปทางขวาจนกว่าคุณจะพบกับขอบเขต จากนั้นเลื่อนลงและไปทางซ้าย (เรากำลังทำ boustrophedon ของพื้นที่ทั้งหมด)
เมื่อคุณอยู่บนเส้นด้านซ้ายขวาและเจอสิ่งกีดขวางคุณมีสองทางเลือก (i) เราสามารถแล่นไปรอบ ๆ จนกว่าเราจะไปถึงเส้นด้านซ้ายขวาที่เราพยายามครอบคลุมแล้วดำเนินการต่อ (ii) เราสามารถพลิกกลับและครอบคลุมเส้นซ้ายขวาใหม่จนกว่าเราจะพบทางผ่านอุปสรรคหรือจบลงในสถานการณ์นี้อีกครั้ง ฉันจะอธิบาย
ทางด้านซ้ายเราเคลื่อนที่ไปรอบ ๆ สิ่งกีดขวางจนกว่าเราจะสามารถกลับไปที่ "เส้น" ที่เรากำลังพยายามติดตาม ทางด้านขวาเรายังคงครอบคลุมพื้นที่ (เล็กกว่า) ที่ด้านหนึ่งของสิ่งกีดขวาง
ข้อดีของวิธีแรกคือคุณทำแผนที่สิ่งกีดขวางให้เรียบร้อยก่อนที่คุณจะตัดสินใจว่าจะทำอย่างไรจึงจะสามารถใช้เส้นทางที่สั้นกว่าได้ ข้อได้เปรียบของวิธีที่สองคือคุณไม่จำเป็นต้องหลบสิ่งกีดขวางเลยคุณสามารถดำเนินการต่อเพื่อครอบคลุมพื้นที่ที่คุณอยู่
โปรดทราบว่าสิ่งนี้จะกำหนดการสลายตัวของ boustrophedon ของคุณในรูปแบบออนไลน์ : คุณครอบคลุมพื้นที่ระหว่างสิ่งกีดขวางหรือระหว่างสิ่งกีดขวางและเขตแดน
อย่างไรก็ตามเท่าที่ฉันรู้วิธีแรกง่ายต่อการวิเคราะห์ อัลกอริทึมที่ซับซ้อนมากขึ้น (เช่น BFS เป็นต้น) ถูกเลือกเนื่องจากสภาพแวดล้อมไม่ จำกัด (คุณไม่ต้องการใช้ตลอดไปเพื่อค้นหาขอบเขต) หรือมีสิ่งกีดขวางที่น่ารังเกียจอย่างแท้จริงในการแบ่งส่วนสภาพแวดล้อม ทำไมสิ่งนี้ถึงไม่ดี? ดูตัวอย่างนี้:
การย้ายซ้าย - ขวาจากนั้นวนสิ่งกีดขวางแต่ละครั้งจะสร้างทางที่ครอบคลุมมากเกินไปของชิ้นส่วนเล็ก ๆ ระหว่างแต่ละสิ่งกีดขวาง ในความเป็นจริงหากไม่มีการวางแผนเส้นทางทั่วโลกคุณสามารถทำให้สิ่งนี้เลวร้ายเท่ากับความละเอียดของกริดของคุณโดยการวางคอลัมน์เหล่านี้กว้าง 1 px สูงเท่ากับสภาพแวดล้อมทั้งหมดและแยก 1 px จากนั้นคุณจะต้องเคลื่อนที่ไปรอบ ๆ สิ่งกีดขวางทุกครั้งที่คุณโดนมัน
นี่คือเหตุผลที่ฉันถามว่าคุณมีความคิดว่าคุณอยู่ที่ไหนในสภาพแวดล้อมหรือการวางแผนเส้นทางทั่วโลก แต่การสนทนาออนไลน์กับออฟไลน์และอัลกอริธึมที่ดีที่สุดสำหรับสิ่งนี้ไม่ใช่สิ่งที่คุณต้องการจริงๆ
อัปเดต: ฉันต้องลบภาพ (ไม่ใช่ https) และจะโพสต์สิ่งนี้ซึ่งมักจะใช้ในแอปพลิเคชันที่ใช้งานได้จริง http://www.cs.cmu.edu/~motionplanning/papers/sbp_papers/integrated1/yamauchi_frontiers.pdf