ฉันถูกบอกว่าต้นไม้รูปสี่เหลี่ยมเป็นโครงสร้างข้อมูลที่เหมาะสำหรับเกมของฉัน แต่ฉันมีปัญหาในการทำความเข้าใจว่ารูปร่างทำงานอย่างไรภายในต้นไม้รูปสี่เหลี่ยม
ฉันทำสิ่งนี้ใน JavaScript แต่ฉันคิดว่าคำถามเหล่านี้สามารถใช้ได้กับต้นไม้สี่ต้นในภาษาใด ๆ
ผมคิดว่าผมเข้าใจส่วนใหญ่วิธีการขั้นพื้นฐาน (x, y) จุดและแทรกจุดงานในต้นไม้รูปสี่เหลี่ยมและที่ฉันสามารถทำมันบนกระดาษ
นี่คือJSfiddleของการทดสอบของฉันกับจุด
นอกเหนือจากกรณีหนึ่งการทดสอบของฉันกับคะแนนทำงานตามที่คาดไว้
แต่ความสับสนของฉันเริ่มต้นเมื่อรูปร่างเช่นสี่เหลี่ยมมีส่วนร่วม เมื่อคุณดึงข้อมูลจากต้นไม้รูปสี่เหลี่ยมด้วยรูปร่างมันจะตรวจสอบแต่ละจุดของรูปร่างและโหนดใดที่มันตกลงไป และการแทรกรูปร่างยังทำงานได้อย่างไรเมื่อมันยอมรับพารามิเตอร์ (x, y, width, height) สำหรับแต่ละรูปร่าง มันใช้ความกว้าง / ความสูงจากจุดเริ่มต้นในการคำนวณจุดมุมอื่น ๆ ซึ่งจะถูกแจกจ่ายไปยังโหนดที่เหมาะสม? หากรูปร่างที่แทรกเข้าไปมีสี่โหนดข้อมูลของรูปร่างนั้นจะถูกบันทึกลงในทั้งสี่โหนดหรือไม่
และเมื่อวิธีการดึงข้อมูลยอมรับรูปร่างเป็นพารามิเตอร์ (x, y, ความกว้างความสูง) สิ่งที่เกิดขึ้นจริง? มันเป็นครั้งแรกหรือไม่ที่จะเห็นว่ารูปร่างของโหนดนั้นจะขยายไปถึงถ้ามันถูกแทรกเข้าไปแล้วดึงวัตถุทั้งหมดของโหนดเหล่านั้นหรือไม่?
ฉันมีJSfiddle ทำงานกับรูปร่างแต่ฉันสับสนอย่างมากกับผลลัพธ์ของการทดสอบของฉัน ฉันได้รับวัตถุที่ซ้ำกันที่ถูกส่งคืน!
ตัวอย่างเช่นสี่เหลี่ยมจัตุรัสสีแดงนั้นเทียบเท่ากับพารามิเตอร์ที่ฉันกำลังเข้าสู่วิธีการดึงของฉัน ฉันคิดว่าเนื่องจากสี่เหลี่ยมสีแดงนี้ครอบคลุมทั้งสี่โหนดมันควรส่งคืนวัตถุทุกชิ้นในต้นไม้รูปสี่เหลี่ยม! แต่มันไม่ได้และฉันมีปัญหาในการหาเหตุผลเข้าข้างตนเองว่ามันจะกลับมา ฉันมีการทดสอบอื่น ๆ อีกจำนวนมากที่แสดงความคิดเห็นอยู่ในขณะนี้ แต่คุณสามารถยกเลิกการแสดงความคิดเห็นและเรียกใช้พวกเขาเพื่อดูผลลัพธ์ที่สับสนมากขึ้น!
ถ้าฉันต้องการส่งคืนคะแนนทั้งหมดในต้นไม้รูปสี่เหลี่ยมฉันจะทำอย่างไร วิธีการดึงข้อมูลโดยใช้รูปร่างขนาดทั้งหมดของขอบเขต? ตัวอย่างเช่นดึง (0, 0, canvas.width, canvas.height)?
ห้องสมุด JavaScript quadtreeฉันใช้ได้รับการเรียกจากแหล่งอื่น ๆ อีกมากมายดังนั้นผมถือว่าการดำเนินงานที่เกิดขึ้นจริงที่ถูกต้องและมีชื่อเสียง
ฉันคิดว่าความสับสนมากมายของฉันอาจเกิดจากความเข้าใจผิดของคำศัพท์ต้นไม้สี่ เช่นทำไมพวกเขาพูดขอบเขตแทนมิติเมื่อ "จุด" มีพารามิเตอร์ความกว้าง / ความสูงเช่นกัน? มันเป็นเรื่องของการประชุม / มือสั้นหรือพวกเขามีแนวคิดที่แตกต่างอย่างสิ้นเชิง?
ขอบคุณที่สละเวลา!
_stuckChildren
เขตข้อมูลในรหัส คุณยังสามารถเห็นสิ่งนี้ได้ในตัวอย่าง "การดึงไอเท็มที่มีขอบเขต" - มันจะเน้นสีแดงของโหนดที่ข้ามขอบของโหนดที่คุณคลิกเข้าไปจนถึงรูตโหนด