TL; DR คุณต้องใช้การดำเนินการบูลีนโดยใช้แผนผัง BSP
ดูเหมือนว่าเรากำลังพูดถึงConstructive Solid Geometryที่นี่ ฉันนำ CSG ไปใช้ในเชิงพาณิชย์เพื่อให้ฉันรู้เรื่องหนึ่งหรือสองอย่างเกี่ยวกับเรื่องนี้
กระดาษคลาสสิกเกี่ยวกับ CSG เรียกว่าMerging BSP Trees Yields Polyhedral Set Operationsโดยทั่วไปแล้วมันอธิบายได้มากเกินไป แต่พูดสั้น ๆ เกี่ยวกับอัลกอริทึมที่เกี่ยวข้องกับรูปหลายเหลี่ยมที่วางอยู่บนระนาบเดียวกับการแบ่งพื้นที่ไบนารีโดยทั่วไปแล้ว ต้นไม้ BSP จากตาข่ายเหลี่ยมหลายอัน ขั้นตอนที่สองคือการรวมต้นไม้ BSP เหล่านั้น คุณเพียงนำต้นไม้หนึ่งต้นมาใส่ไว้ในต้นอีกต้นหนึ่ง จากนั้นอัลกอริทึมดำเนินการเพื่ออธิบายวิธีจัดการกับแต่ละโหนดปมสำหรับการแบ่งและการแทนที่โหนดโหนดที่ไม่ต้องการในรูปร่างสุดท้ายจะถูกลบออกส่วนอื่นจะได้รับพาเรนต์ที่เหมาะสม
แต่เดี๋ยวก่อน! โดยทั่วไปแล้วกระดาษนั้นพูดเกี่ยวกับตาข่ายเหลี่ยมและระนาบ 3 มิติใช่ไหม
อัลกอริทึมสามารถกำหนดให้เป็นมิติใดก็ได้ดังนั้นในกรณีแบบ 2D ของคุณคุณสามารถใช้เซกเมนต์เส้นได้ง่ายแทนที่จะเป็นระนาบพาร์ติชันแบบไบนารี ดังนั้นรูปหลายเหลี่ยมแต่ละอันจะถูกแปลงเป็นแผนผัง BSP กว่าทั้งสองจะรวมเข้าด้วยกัน ในที่สุดคุณจะข้ามต้นไม้ผลลัพธ์เพื่อสร้างรูปหลายเหลี่ยมสุดท้าย
โปรดทราบว่าอัลกอริทึมและ CSG นี้โดยทั่วไปไม่ได้จัดการกับการเรนเดอร์และการประกบใบหน้าโดยตรงและยังไม่พร้อมที่จะเรนเดอร์จริง ๆ ดังนั้นคุณต้องแยกใบหน้าของทรี BSP สุดท้าย ฉันยังพบว่าการติดตามรังสีเป็นวิธีที่ง่ายกว่าสำหรับการเรนเดอร์ผลลัพธ์ CSG คุณเพียงต้องการรังสีเพื่อสำรวจต้นไม้แทนที่จะแยกและแยกใบหน้าออกมาจริงๆ
เกี่ยวกับความทนทานเชิงตัวเลข เป็นการดีที่จะทราบว่ามีการคำนวณทางเรขาคณิตสองประเภท
- สิ่งที่อยู่บนพื้นฐานการก่อสร้างคุณสร้างรูปร่างตามผลลัพธ์ของการดำเนินการก่อนหน้า ตัวอย่างเช่น
y = sqrt(x)
จากนั้นใช้y
ในการดำเนินการใหม่ สิ่งนี้เรียกว่าการก่อสร้าง ปัญหาคือข้อผิดพลาดที่เป็นตัวเลขจะสะสมอย่างรวดเร็ว
- อีกวิธีหนึ่งคือมีการดำเนินงานที่ใช้เพรดิเคตแทนเป็นหลักแทนที่จะใช้การก่อสร้างคุณเพียงแค่ถามว่าเงื่อนไขเป็นจริง / เท็จและใช้ค่าเดียวกันในการดำเนินการที่แตกต่างกัน การทดสอบแบบคลาสสิกรวมถึงการวนรอบและการทดสอบการวางแนว นี่เป็นสิ่งที่น่าสงสัยว่าจะเกิดข้อผิดพลาดเชิงตัวเลขโดยเฉพาะอย่างยิ่งถ้าคุณใช้ความแม่นยำเดี่ยวหรือคู่ แต่โดยปกติแล้วจะให้ผลลัพธ์ที่ดีกว่ามาก โซลูชันอื่น ๆ ที่แตกต่างกันไปตามความเร็วและความแม่นยำนั้นมีอยู่ นี่คือหนึ่งในเอกสารล่าสุดที่หลีกเลี่ยงการก่อสร้างโดยใช้รูปทรงเรขาคณิตบนเครื่องบินเพื่อให้ได้ผลลัพธ์ที่ถูกต้อง ฉันจะพูดจากกระดาษ:
แนวคิดของการเป็นตัวแทนเครื่องบินโดยใช้ตาข่ายเหลี่ยมนั้นถูกอธิบายเป็นครั้งแรกโดย Sugihara และ Iri [SI89] การเป็นตัวแทนชนิดนี้ให้ประโยชน์ที่สำคัญอย่างหนึ่งเมื่อพูดถึงงานที่เกี่ยวข้องกับการเปลี่ยนโทโพโลยีของของแข็งที่เป็นตัวแทนของตาข่ายเช่นการประเมินผลของบูลีนนิพจน์: ไม่มีการสร้างข้อมูลเรขาคณิตเบื้องต้นใหม่เพื่อให้ได้รูปทรงหลายเหลี่ยม
และสุดท้ายผมอยากจะเพิ่มหากคุณต้องการที่จะเริ่มต้นการดำเนินงาน BSP CSG ของคุณผมจะแนะนำให้เริ่มต้นในBSP Faqs