Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Vladimir A. Pertzel                  2:5020/400     04 Sep 2002  11:48:14
 To : Roman Babakov
 Subject : Re: Вывод некоего дерева
 -------------------------------------------------------------------------------- 
 
 
 "Roman Babakov" <Roman.Babakov@p27.f220.n465.z2.fidonet.org> wrote in message
 news:1030910234@p27.f220.n465.z2.fidonet.ftn...
 
 > HELLo, All!
 >
 >         Посоветуйте, pls: как лучше вывести (консольно) некое дерево,
 >     состоящее, например, из вершин графа. А то дерево есть, а увидеть
 
 1. Зная координаты начала рисунка, вывести на экран одну вершину
 и посчитать для нее bounding box не проблема? Вариантов, правда,
 много: обозначать звездочкой, прямоугольником или точкой, возможно
 размером в ширину линии; надпись распологать вертикально или
 горизонтально, внутри прямоугольника или снаружи, справа точки или
 снизу...
 
 2. Умея рисовать поддеревья и зная для них bounding boxen, нарисовать
 некую вершину и посчитать для нее bounding box тоже просто: рисуем
 первого потомка, затем, по очереди, вычисляем общий bounding box
 для уже нарисованных и рисуем остальных потомков. После чего
 пририсовываем родителя. Вариантов, правда, много: распологать детей
 вертикально (а родителя справа или слева) или горизонтально; родителя
 распологать с краю или в центре; соединять родителя с потомками
 прямой, дугой или ломаной со звеньями параллельными осям координат.
 Возможно, придется весь рисунок сдвинуть параллельным переносом,
 для простоты написания кода, так, чтобы либо одна из вершин bounding
 box, либо рисуемая вешина совпадала с началом координат (дело вкуса).
 
 Вот, собственно и всё. Hарисовав так (рекурсивно) узел, выбранный в
 качестве вершины, получишь всё дерево. Только определись с выбором,
 как располагать, а это зависит от глубины дерева и количества потомков
 у одного узла.
 
 Если поддеревья имеют сильно разное количество узлов, можно усложнить
 алгоритм, и хранить отдельно bounding boxen для всех потомков
 некоторого уровня, чтобы иметь возможность сдвинуть деревья поближе.
 Тут опять вариант: сдвигать поддерево, жестко скрепленное, или сдвигать
 по уровням, начиная с верхнего, но во втором варианте требуется думать,
 каковы допустимые границы сдвига, чтобы не возникало искажения восприятия.
 на мой взгляд, (скажем) левый потомок не может быль левее, а правый
 правее родителя, но это субъективно.
 
 bounding box -- это такой прямоугольник, который вмещает в себя рисунок,
 возможно, с необходимыми полями.
 
 --- ifmail v.2.15dev5
  * Origin: Sent via Graf's Inn at news://news.relhum.org (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: Вывод некоего дерева   Vladimir A. Pertzel   04 Sep 2002 11:48:14 
Архивное /ru.algorithms/13592a309b166.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional