คุณสามารถแก้ไขปัญหานี้แบบวนซ้ำได้
หากไม่มีไดอะแกรม (ซึ่งจะช่วยได้มาก!) นี่คือโครงร่าง - คุณต้องกรอกรายละเอียด! - ของอัลกอริทึมหนึ่งสำหรับสิ่งนี้ กำลังพิมพ์อัลกอริทึมลงในคำตอบโดยตรง - คาดว่าจะเกิดข้อผิดพลาด
อันดับแรก:
- กรอบล้อมรอบ สี่เหลี่ยมผืนผ้าล้อมรอบภาพวาดของต้นไม้ (ย่อย)
- Anchor เป็นจุดที่การเชื่อมต่อส่วนโค้งจะดึง ไปทาง (ส่วนหนึ่งของส่วนโค้งอาจถูกบดบังด้วยการวาดโหนด) เพื่อเชื่อมต่อกับแผนผัง (ย่อย)
- จุดยึดจะเป็นจุดกำเนิดพิกัดของกล่องขอบเขต ดังนั้นกล่องขอบเขตจึงเป็นหน่วยวัดที่สัมพันธ์กับจุดนี้
- กล่องที่มีขอบเขตอาจมี ลูก - กล่องที่มีขอบเขตสำหรับทรีย่อย ตำแหน่งของเด็กแต่ละคนจะสัมพันธ์กับจุดยึดกล่อง
ตอนนี้:
ขั้นแรกให้พิจารณาวาดโหนดเดียวโดยไม่มีลูก ขึ้นอยู่กับขนาดที่คุณต้องการ คุณสามารถกำหนดขอบเขตกล่องสำหรับโหนดเดียวนี้ได้ คุณกำลังใช้วงกลม ดังนั้นจุดยึด จุดกำเนิดพิกัด (0,0) ของกล่องขอบเขตอยู่ที่กึ่งกลาง และกล่องขอบเขตคือ +/- รัศมีสัมพันธ์กับสิ่งนั้น ดังนั้นคุณจึงมีจุดยึดของกล่องขอบเขต (0,0) และขนาดของมันสัมพันธ์กับสิ่งนั้น - พูดว่า (x ขั้นต่ำ, x สูงสุด, y ขั้นต่ำ, y สูงสุด) เป็น (-รัศมี, +รัศมี, -รัศมี, +รัศมี) คุณอาจต้องการจัดเก็บเลเบลของโหนดด้วย ตัวอย่างเช่น สำหรับโหนด "L" ในไดอะแกรมของคุณโดยรวม คุณจะมีการแสดง (เช่น และวัตถุ) ที่มี: (0,0), (-radius, +radius, -radius, +radius) & "L"
ตอนนี้ให้ลองวาดโหนดที่มีลูกคนเดียว โดยการเรียกซ้ำกำหนดกรอบขอบเขตสำหรับเด็ก สร้างกล่องขอบเขตเพื่อล้อมรอบเด็กด้วยโหนดของคุณที่ตรงกลางด้านบนของกล่องนี้ และกล่องขอบเขตเด็กที่อยู่ด้านล่างโดยตรง ดังนั้นคุณจึงมีสมอของกล่องผูกซึ่งมีขนาดสัมพันธ์กับสิ่งนั้น และมีลูกหนึ่งลูกที่ออฟเซ็ตจากสมอ ตัวอย่างเช่นสำหรับโหนด "H" ด้านบนคุณมี: (0,0), (xmin, xmax, ymin, ymax), "H", 1 ลูกที่ (xoffset, yoffset), ลูกคือ (อ้างอิงถึงวัตถุ ) (0,0), (-รัศมี, +รัศมี, -รัศมี, +รัศมี) & "L"
ตอนนี้ให้ลองวาดโหนดที่มีลูก 2 คน ฯลฯ
การแวะเวียนแบบเรียกซ้ำครั้งเดียวจากรากของแผนผังของคุณ ที่แต่ละโหนดรวมข้อมูลที่ส่งคืนจากแผนผังย่อย จะสร้างโครงสร้างที่อธิบายโครงร่างของแผนผังของคุณ ตอนนี้วาดมัน!
ฮ
person
CRD
schedule
03.12.2013