ฉันคิดว่าการทำพิธีการ "edge algebra" ของ Guibas และ Stolfi นั้นไม่จำเป็นเลย
สิ่งที่จำเป็นจริงๆคือการจดจำความแตกต่างระหว่างกราฟแรกและกราฟคู่ แต่ละหน้าของกราฟเบื้องต้นมีจุดยอดคู่ที่สอดคล้องกัน ; ขอบแต่ละอันของกราฟเบื้องต้นนั้นมีขอบคู่ที่สอดคล้องกัน ; และแต่ละจุดสุดยอดของกราฟปฐมมีที่สอดคล้องกันคู่หน้า * ขอบปฐมเชื่อมต่อจุดยอดดั้งเดิมและใบหน้าที่แยกต่างหาก ขอบคู่เชื่อมต่อจุดยอดคู่และแยกหน้าคู่ คู่ของสองสิ่งคือสิ่งเดิม ดูรูปที่ 4 ในกระดาษของ Guibas และ Stolfi:f ∗ e e ∗ v v ∗ฉฉ* * * *อีอี* * * *โวลต์โวลต์* * * *
Guibas และ Stolfi เสนอความคิดเกี่ยวกับแต่ละขอบ (ไม่ว่าจะเป็นครั้งแรกหรือครั้งที่สอง) เป็นชุดของสี่ขอบกำกับเน้น ; สำหรับความเรียบง่าย, ฉันจะเรียกเหล่านี้ลูกดอก แต่ละลูกดอกคะแนนจากจุดปลายหนึ่งไปยังจุดปลายอีกและแยกใบหน้าสองหน้าและ{E}) ตัวเลือกที่ปลายทางที่จะโทรหาคือทิศทางของโผและตัวเลือกที่จะโทรหาเป็นการวางแนวหาง( → e )หัว( → e )ซ้าย( → e )ขวา( → e )หาง( → e )ซ้าย( → e )อี⃗ หาง( e⃗ )หัว( e⃗ )ซ้าย( e⃗ )ถูกต้อง( e⃗ )หาง( e⃗ )ซ้าย( e⃗ ). (Guibas และ Stolfi ใช้ "Org" และ "Dest" แทน "tail" และ "head" แต่ฉันชอบป้ายที่สั้นกว่าเพราะตัวย่อที่ไม่จำเป็นเป็นสิ่งชั่วร้าย)
สำหรับลูกดอกใด ๆGuibas และ Stolfi เชื่อมโยงลูกดอกสามดอกที่เกี่ยวข้อง:อี⃗
- tail ( → e ) → etailNext ( e⃗ ) : โผออกต่อไปเพื่อทวนเข็มนาฬิกาหลังจาก{E}หาง( e⃗ )อี⃗
- → eซ้าย( → e ) ขวา(ฟลิป( e⃗ ) : ลูกดอก“ เดียวกัน” เป็นแต่มีและสลับอี⃗ ซ้าย( e⃗ )ถูกต้อง( e⃗ )
- หมุน( e⃗ ) : โผคู่ที่ได้รับโดยให้หนึ่งในสี่หันทวนเข็มนาฬิการอบจุดกึ่งกลางอี⃗
ฟังก์ชั่นทั้งสามนี้ตอบสนองตัวตนที่น่าอัศจรรย์ทุกประเภทเช่น:
- ขวา( tailNext ( e⃗ ) ) = ซ้าย( e⃗ )
- ถูกต้อง( พลิก( e⃗ ) ) = ซ้าย( e⃗ )
- ขวา( หมุน( e⃗ ) ) = head ( e⃗ )* * * *
- พลิก( พลิก( e⃗ ) ) = e⃗
- หมุน( หมุน( หมุน( หมุน( หมุน( e)⃗ ) ) ) ) = e⃗
- tailNext ( หมุน( tailNext ( หมุน( e⃗ ) ) ) ) = e⃗
สำหรับรายการทั้งหมดให้ดูหน้า 83 ของกระดาษ (แต่ระวังว่าผู้แต่งใช้เครื่องหมาย postfixน่าจะเป็นเพราะมันใกล้กับรหัสประกาศ) Guibas และ Stolfi เรียกร้องใด ๆ สามของฟังก์ชั่นความพึงพอใจของตัวตนทั้งหมดเหล่านี้พีชคณิตขอบE F l การฉันหนe.Flip
ยิ่งไปกว่านั้นด้วยฟังก์ชั่นทั้งสามนี้เราสามารถกำหนดฟังก์ชั่นที่มีประโยชน์อื่น ๆ อีกมากมายเช่น
- ย้อนกลับ( e⃗ ) = หมุน( พลิก( หมุน( e⃗ ) ) ) - สลับหัวและหางจุดยอด
- → eเหลือ( → e )เหลือถัดไป( e⃗ ) = หมุน( tailNext ( หมุน( หมุน( หมุน( e.)⃗ ) ) ) ) ) - โผถัดไปหลังจากตามลำดับทวนเข็มนาฬิการอบใบหน้าอี⃗ ซ้าย( e⃗ )
ในที่สุดการรู้ว่าฟังก์ชั่นเหล่านี้จะบอกคุณทุกอย่างเกี่ยวกับโทโพโลยีของการแบ่งและการแบ่งเหลี่ยมหลายเหลี่ยมของพื้นผิวใด ๆ (ปรับทิศทางได้หรือไม่) สามารถเข้ารหัสได้โดยใช้ฟังก์ชันทั้งสามนี้
โครงสร้างข้อมูลแบบ quad-edge เป็นการแสดงกราฟพื้นผิวที่ให้ความสะดวกในการเข้าถึงฟังก์ชั่นเหล่านี้พร้อมกับการดำเนินการเวลาคงที่อื่น ๆ เช่นการแทรกการลบการทำสัญญาการขยายและการพลิกขอบ แยกหรือรวมจุดยอดหรือใบหน้า; และการเพิ่มหรือลบที่จับหรือข้ามแคป
มีความสุข!