ตรรกะการแยกทรี kd คืออะไร


12

ฉันพยายามหาวิธีใช้ต้นไม้ KD

ในหน้า 322 ของ "การตรวจจับการชนกันแบบเรียลไทม์" โดยEricson

ส่วนข้อความรวมอยู่ด้านล่างในกรณีที่หน้าตัวอย่างของหนังสือ Google ไม่อนุญาตให้คุณเห็นเวลาที่คุณคลิกที่ลิงก์

ส่วนข้อความ

ส่วนที่เกี่ยวข้อง:

แนวคิดพื้นฐานที่อยู่เบื้องหลังการตัดกันของเรย์หรือส่วนของเส้นกำกับที่มีต้นไม้ kd นั้นตรงไปตรงมา บรรทัดถูกตัดกับระนาบการแยกของโหนดและคำนวณค่า t ของการตัดกัน หาก t อยู่ภายในช่วงของบรรทัด 0 <= t <= tmax เส้นเลาะเลียบไปตามระนาบและลูกทั้งสองของต้นไม้ลงมาซ้ำ ๆ ถ้าไม่เพียง แต่ด้านที่มีต้นกำเนิดของกลุ่มนั้นจะถูกเยี่ยมชมซ้ำ

ดังนั้นนี่คือสิ่งที่ฉันมี: ( เปิดภาพในแท็บใหม่หากคุณไม่เห็นตัวอักษร)

ภาพ

ต้นไม้ตรรกะ

divs

ที่นี่แสงสีส้มกำลังผ่านฉาก 3 มิติ x แทนจุดตัดด้วยระนาบ จากซ้ายสุดฮิต:

  • ด้านหน้าของลูกบาศก์ล้อมรอบฉาก
  • ระนาบการแยก (1)
  • ระนาบการแยก (2.2)
  • ด้านขวาของลูกบาศก์ล้อมรอบฉาก

แต่นี่คือสิ่งที่จะเกิดขึ้นอย่างไร้เดียงสาตามคำอธิบายพื้นฐานของ Ericson ด้านบน:

  • ทดสอบกับเครื่องบินแยก (1) เรย์ชนระนาบแยก (1) ดังนั้นลูกซ้ายและขวาของระนาบแยก (1) จึงรวมอยู่ในการทดสอบถัดไป
  • ทดสอบกับเครื่องบินแยก (2.1) เรย์ยิงเครื่องบินลำนั้นออกไป (ไปทางขวา) ดังนั้นเด็กทั้งสองจึงรวมอยู่ในการทดสอบระดับถัดไป (สิ่งนี้ตอบโต้ได้ง่าย - ไม่ควรรวมเฉพาะโหนดด้านล่างในการทดสอบครั้งต่อไป)

บางคนสามารถอธิบายสิ่งที่เกิดขึ้นเมื่อแสงสีส้มผ่านฉากได้อย่างถูกต้อง?

คำตอบ:


14

มันค่อนข้างง่ายจริงๆ การทดสอบกับระนาบการแยก (2.1) ควรล้มเหลวเนื่องจากสิ่งต่อไปนี้:

เมื่อรังสีกระทบกับระนาบการแยก (1) คุณ "แยกรังสี" หรือ; คุณตั้งค่า - ช่วงtที่ถูกต้องและลงต้นไม้ด้วยชิ้นส่วนที่เกิดขึ้น

ดังนั้นเมื่อตรวจสอบกับเครื่องบิน (2.1) คุณควรตรวจสอบว่ามีเพียงส่วนหนึ่งของรังสีที่เหลือของเครื่องบิน (1) ตัดกับเครื่องบิน (2.1) ซึ่งไม่ได้ "การอยู่ห่างไกลออกไปทางขวา" สี่แยกที่คุณพูดถึงมีt> และtคุ้มค่าที่คุณแยก ray กับเครื่องบิน (1)

ฉันหวังว่าชัดเจนเพียงพอ

สรุป: การแยกเรย์ / ระนาบที่ตามมาควรทำเฉพาะกับส่วนที่เหลือของเรย์หลังจากการแยกกับระนาบที่เป็นปัญหา


1
Grr !! (ย่อมาจากคำตอบที่ดี)
bobobobo

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