Anda dapat menyelesaikan masalah ini secara rekursif.
Tanpa diagram (yang akan sangat membantu!) Berikut adalah garis besar - Anda perlu mengisi detailnya! - dari satu algoritma untuk ini. Algoritma sedang diketik langsung ke dalam jawaban - mengharapkan kesalahan.
Pertama:
- Kotak pembatas persegi panjang yang mengapit gambar (sub)pohon.
- Jangkar sebagai titik di mana busur penghubung akan ditarik ke arah (bagian dari busur mungkin tertutup oleh gambar simpul) untuk terhubung ke (sub)pohon.
- Jangkar akan menjadi titik asal koordinat kotak pembatas - jadi kotak pembatas adalah pengukuran relatif terhadap titik ini.
- Kotak pembatas mungkin mempunyai anak - kotak pembatas untuk subpohon. Lokasi masing-masing anak relatif terhadap kotak jangkar.
Sekarang:
Pertimbangkan terlebih dahulu menggambar satu simpul tanpa anak. Berdasarkan ukuran yang Anda inginkan, Anda dapat menentukan kotak pembatas untuk simpul tunggal ini. Anda menggunakan lingkaran sehingga jangkarnya, koordinat asal (0,0) dari kotak pembatas berada di tengah dan kotak pembatas adalah +/- jari-jari relatif terhadap itu. Jadi Anda memiliki jangkar kotak pembatas, (0,0), dan ukurannya relatif terhadap itu - katakanlah (x minimum, x maksimum, y minimum, y maksimum) menjadi (-radius, +radius, -radius, +radius). Anda mungkin juga ingin menyimpan label simpul. Jadi misalnya untuk simpul "L" dalam diagram Anda secara total Anda memiliki representasi (yaitu dan objek) yang berisi: (0,0), (-radius, +radius, -radius, +radius) & "L".
Sekarang pertimbangkan menggambar sebuah simpul dengan satu anak. Dengan panggilan rekursif, tentukan kotak pembatas untuk anak tersebut. Buatlah kotak pembatas untuk mengapit anak dengan simpul Anda di tengah atas kotak ini dan kotak pembatas anak tepat di bawahnya. Jadi Anda memiliki jangkar kotak pembatas, ukurannya relatif terhadap itu, dan satu anak dengan offset dari jangkar. Jadi misalnya untuk node "H" di atas Anda memiliki: (0,0), (xmin, xmax, ymin, ymax), "H", 1 child di (xoffset, yoffset), child is (referensi ke objek ) (0,0), (-radius, +radius, -radius, +radius) & "L".
Sekarang pertimbangkan menggambar sebuah simpul dengan 2 anak, dll.
Sebuah traversal rekursif tunggal dari akar pohon Anda, pada setiap node menggabungkan informasi yang dikembalikan dari subpohon, menghasilkan struktur yang menggambarkan tata letak pohon Anda. Sekarang gambarlah!
HTH
person
CRD
schedule
03.12.2013