Дерево набросок: Сосна Дерево Набросок — Бесплатная векторная графика на Pixabay
- Дерево набросок (ID 19994) — Рисунки и Иллюстрации. Портфолио фрилансера Александр Воронов (novadesign2012).
- 404.
- старый рисунок набросок Два пейзажа из раннехристианских времен и Ветвистое дерево 1930е гг
- Рисунок деревьев. Наброски разных пород деревьев
- Наброски деревьев. Сентябрь 2019. — ЖУРНАЛ ТАТЬЯНЫ АЛЕКСЕЕВОЙ
- Слиток металла, кусок дерева, служащие заготовками для какого-либо изделия; (переносное значение, разговорное) Черновой набросок, схема чего-либо, 8 (восемь) букв
- О набросках карандашом на пленере
- Рисование деревьев для детей. Рисование дерева шаг за шагом
- Материалы для этого урока рисования дерева для детей….
- Стилизованный рисунок дерева…
- На что похоже настоящее дерево…
- Нарисуйте ствол дерева…
- Как нарисовать дерево буквами «y» и «v»….
- Добавьте больше букв «V» к своему простому рисованию дерева…
- Добавление цвета к вашему простому рисунку дерева….
- Вы лучше учитесь, наблюдая? Следите за этим БЕСПЛАТНЫМ видеоуроком, пока мы учимся рисовать дерево, используя буквы «Y» и «V»….
- Если вам понравилось рисовать дерево из букв, поделитесь этим постом!
- Тест рисования дерева (тест Баума Коха): полезная помощь в диагностике когнитивных нарушений
Дерево набросок (ID 19994) — Рисунки и Иллюстрации. Портфолио фрилансера Александр Воронов (novadesign2012).
Вход в аккаунт
Восстановление пароля
Требуется авторизация
Пожалуйста, авторизуйтесь для отправки сообщения.
Требуется авторизация
Пожалуйста, авторизуйтесь, чтобы оставить заметку о работодателе.
Требуется авторизация
Пожалуйста, авторизуйтесь, чтобы оставить заметку о соискателе.
Требуется авторизация
Пожалуйста, авторизуйтесь как работодатель для добавления соискателя в закладки.
Требуется авторизация
Чтобы добавить проект в избранное, пожалуйста, авторизуйтесь как фрилансер.
Предложить работу
Требуется авторизоваться как работодатель
Чтобы предложить проект, пожалуйста, авторизуйтесь как работодатель.
Добавить фотографию
- Загружается…
сюда фотографию
Минимальное разрешение: 250 х 250 px
Максимальный размер: 5 mb
Если вы поделитесь ссылкой в двух разных сетях, то получите +10 к рейтингу!
404.

Галерея
- Главная
- Галерея
- Блог
- Магазин

- facebook.com/vladimir.n.tuporshin
- instagram.com/tuporshin
старый рисунок набросок Два пейзажа из раннехристианских времен и Ветвистое дерево 1930е гг
Параметры:
Гарантия подлинности : Гарантия Продавца
Жанр : Другие жанры
Материал : Бумага
старый рисунок набросок Два пейзажа из раннехристианских времен
/ Ветвистое дерево. (из блокнота) 18х13см
Добавить к описанию 12.12.2018 5:21:
Просьба справляться о наличии лота, т.к. он продается и на других площадках и может уже быть продан
Тип сделки:
ПредоплатаСпособы оплаты:
Банковский перевод
Наличными при встрече
Доставка:
Личная встреча
Самовывоз
Ставок пока нет.
Рисунок деревьев. Наброски разных пород деревьев
Рисунок деревьев.Наброски разных
пород деревьев.
Как рисовать различные породы деревьев?
В природе существует большое разнообразие деревьев и каждое дерево
имеет свои особенности. Но для художника важны особенности внешнего
вида дерева. И чтобы научиться его рисовать нужно наблюдать за формой
ствола, формой веток, листьев, формой всей кроны дерева. Ведь, у каждой
породы свои характерные особенности. Иногда может показаться, что даже
настроение у деревьев разное. Поэтому на этом занятии мы обсудим
особенности у 3 видов деревьев — клёна, берёзы, ели.
КЛЕН
• Ствол клена может изгибаться и разветвляться, от этого он
приобретает извилистую форму.
• Кора тёмного цвета, в целом похожа на кору большинства
деревьев.
• Верхушка кроны этого дерева округлая, но может иметь и
неправильную форму.

• Кленовый лист, как
известно, имеет
остроконечную форму,
похожую на звезду.
Большие массы кленовых
листьев создают
«колючую» фактуру
поверхности кроны.
БЕРЕЗА
• Крона берёзы часто имеет вытянутую форму, устремлённую вверх.
• Берёзовая кора белая на поверхности. Но она имеет тёмные
«штрихи», которые являются по-сути трещинами, сквозь которые
виден тёмный внутренний слой. Чем ближе к земле, тем чаще эти
«штрихи» появляются на коре. «Чёрные черточки» имеются на
стволе у основания ветвей, т. е.
в тех местах ствола, откуда
растут ветви.
• Малые ветки берёз настолько
тонкие и гибкие, что свисают,
устремляясь вниз.
• В рисунке карандашом
изящный характер берёзок
можно передать продольной
вертикальной штриховкой.
ЕЛЬ
• Ветви ели слегка изогнуты вверх. В нижних ярусах старые ветви
опущены вниз и напоминают «лапы».

• Когда художник пишет пейзаж, он пишет деревья объёмными.
Для этого нужно проследить как освещается всё дерево целиком
и как освещены отдельные ветви.
Уходя внутрь кроны, еловая «лапа»
погружается в тень. Снаружи она
может оставаться светлой, так как
На неё попадает больше дневного
света.
• Цвет еловой хвои темный и
насыщенный. Поэтому как отдельные
ели, так и массив елового леса
в целом, будут отличаться по цвету
от других видов деревьев.
ЕЛЬ
• Ветви ели слегка изогнуты вверх. В нижних ярусах старые ветви
опущены вниз и напоминают «лапы».
• Крона ели по форме напоминает треугольник и состоит из ярусов.
• Когда художник пишет пейзаж, он пишет деревья объёмными.
Для этого нужно проследить как освещается всё дерево целиком
и как освещены отдельные ветви.
Уходя внутрь кроны, еловая «лапа»
погружается в тень. Снаружи она
может оставаться светлой, так как
На неё попадает больше дневного
света.

• Цвет еловой хвои темный и
насыщенный. Поэтому как отдельные
ели, так и массив елового леса
в целом, будут отличаться по цвету
от других видов деревьев.
Наброски деревьев. Сентябрь 2019. — ЖУРНАЛ ТАТЬЯНЫ АЛЕКСЕЕВОЙ
Вчера помогала дочке делать публикацию о её на набросках во время наших осенних велопрогулок и нашла массу своих эскизов того же времени, размером 10×15 см. Многие сделаны на тёплом сентябрьском солнышке, а некоторые уже на холоде, когда руки коченели без перчаток. И почти все — о деревьях. Этим летом и в начале осени мы встречались с удивительно красивыми деревьями! Те, что на моём участке — давние друзья, а вот на многие липы в разных старых парках, ветлы у деревенских прудов я посмотрела иначе. Конечно я знала их с детства, как и все окрестности своей дачи. Но показывая их ребёнку, словно заново с ними знакомишься. Особенно поразили меня гигантские липы в деревне Подолы. Красавицы! Кстати, Гугл подсказал, что там была усадьба «временного купца» Журавлёва.
Старая липа на месте усадьбы Подолы Рузского района Московской области. (Усадьба Журавлёва.) Бум., Гелевая ручка. Размер 10×15 см.
____
Домик внизу — обычная маленькая, одноэтажная дачка с чердаком. Он не кукольный.
Старая липа на месте усадьбы Подолы Рузского района Московской области. (Усадьба Журавлёва.) Бум., Гелевая ручка. Размер 10×15 см.
Ветка Маньчжурского ореха.
Бум., гелевая ручка. 10×15 см.
Старые Ветлы у пруда в деревне Андрейково, Рузского района Московской области.
Бум., гелевая ручка. 10×15 см.
Прудик и домик в лесу. Рузский район Московской области.
Бум., гелевая ручка. 10×15 см.
Огромный, старый тополь в деревне Подолы Рузского района Московской области.
Бум., гелевая ручка. 10×15 см.
_____
Надо его ещё порисовать — тут вид сверху и он не так уж огромен. В жизни он ещё больше.
Это Тополь Белый или Тополь серебри́стый (лат. Pópulus álba) . Живут они не слишком уж долго, так что этому экземпляру, скорее всего около 100 лет. 62 года точно, так как он уже был большим, когда дедушка с бабушкой приехали в эти места. И я прочла, что «Некоторые виды доживают до 120—150 лет.»
Старая дача и ветки Маньчжурского ореха.
Бум., гелевая ручка. 10×15 см.
Сад с яблоками.
Рузский район Московской области.
Бум., гелевая ручка. 10×15 см.
Слиток металла, кусок дерева, служащие заготовками для какого-либо изделия; (переносное значение, разговорное) Черновой набросок, схема чего-либо, 8 (восемь) букв
Толковый словарь русского языка. С.И.Ожегов, Н.Ю.Шведова.
Значение слова в словаре Толковый словарь русского языка. С.И.Ожегов, Н.Ю.Шведова.
-и, ж. Заготовка для изделий — отлитый в форму слиток металла, а также кусок дерева или другого материала. То же, что болван (во 2 знач.). прил. болваночный, -ая, -ое.
Толковый словарь русского языка. Д.Н. Ушаков
Значение слова в словаре Толковый словарь русского языка. Д.Н. Ушаков
болванки, ж. (тех.). Слиток стали, получаемый после разливки ее в металлические формы — изложницы. Кусок железа, полученный из крицы после проковки ее под молотом и идущий на изделия. Грубо отлитая вещь под отделку. То же, что болван во 2 знач.
Новый толково-словообразовательный словарь русского языка, Т. Ф. Ефремова.
Значение слова в словаре Новый толково-словообразовательный словарь русского языка, Т. Ф. Ефремова.
ж. Слиток металла, кусок дерева и т.п., служащие заготовками для какого-л. изделия. перен. разг. Черновой набросок, схема чего-л. То же, что: болван (3). перен. разг.-сниж. Бестолковая, глупая женщина.
Википедия
Значение слова в словаре Википедия
Болванка : Получивший предварительные формы материал или деталь для последующей обработки; то же, что заготовка . Болванка — артиллерийский снаряд с твёрдым сердечником, без взрывчатого вещества. Болванка — чистый, не записанный компакт-диск .
О набросках карандашом на пленере
О набросках карандашом на пленере
Рассмотрим особенности рисования карандашного наброска на пленере.
Карандашный набросок на пленере полезен и эффективен в нескольких отношениях.
Во-первых, это занятие, требующее минимум снаряжения: планшет А4 с офисной бумагой да мягкий (5В-9В) карандаш — вот и весь необходимый минимум. Правда, если Вы идете целенаправленно, желательно все же иметь маленький складной стульчик (а не кресло!!!) из магазина рыболов, за 600р, можно со спинкой.
Но в ситуации, когда Вы сомневаетесь, тащить ли с собой этюдник с маслом, и идти ли по этой причине, на пленер вообще, планшетик и карандаш могут быть в каком-то смысле выходом.
Когда сделана серия этюдов маслом — зарисовки графическими материалами, это отличная возможность переключиться. Карандаш в таких ситуациях, как раз и раскрывает себя как графический материал, что в повседневных учебных рисунках иногда немного забывается.
Одной из интересных с точки зрения образности, фактурности тем для набросков, я вляется рисование элементов старой архитектуры.
При этом, с самого начала мы можем рисовать не равнодушно — применяя разное давление на карандаш.
Дальше набросок может переходить в тональный, в этом случае, психологически, приемы работы по внутренним ощущениям близки к работе над живописным этюдом. Тональный набросок вообще, можно порекомендовать в качестве частого упражнения начинающим живописцам.
Либо карандашный набросок может оставаться по преимуществу линейным. В этом случае, мы можем например позаботиться о «живости», не равнодушности линий и использовать их например для фактуры изображаемых объектов, передачи каменной кладки и т.д.
Заметим, сами принципы работы, способы нанесения линий в таких набросках отличаются от тех, что мы привыкли применять, работая над длительными рисунками в студии — здесь как правило не требуется тонкая, аккуратная штриховка и некоторая холодность, присущая длительным учебным рисункам начинающих художников. Наоборот, каждая линия здесь по возможности «живая», «живописная» — не одинаковой толщины и жирности. так же и нанесение тона, скорее можно охарактеризовать, как своеобразное намазывание, или подкрашивание, его органично наносить лопаточкой, а не острием. А конкретные детальки все же удобнее уточнять острием. Это заставляет нас включать ощущение кончика грифеля, как разнообразного инструмента.
Следствием такого «включения» новых ощущений, является большее графическое богатство получающихся набросков. Почувствовав в себе эту способность — с первых же линий выдавать более интересный в графическом отношении рисунок, начинающий художник, помимо общего прилива радости, получает следующие возможности для применения новых навыков:
1. Более позитивное отношение к рисованию набросков вообще — раз они получаются более интересными, эстетичными и т.д., значит есть стимул их чаще делать!
2. Прочувствование самого механизма нанесения «живописной» линии, приводит к желанию применять ее для быстрого отображения любых объектов, не только в окружении, но по памяти, что в итоге, способствует большей легкости в создании графических работ из воображения.
3. Осознание линии и штрихов как более живых элементов самих по себе, сказывается и на работе над длительными рисунками — они становятся более сочными, исчезает некоторая сухость, равнодушие линий и штриховки.
Таким образом, если у большинства начинающих, наброски вначале больше напоминают длительные рисунки в миниатюре (поскольку длительными рисунками занимаются, а набросками — нет), затем наброски приобретают свои характерные черты, затем наброски начинают влиять на длительный рисунок.
Не только для развития пластичности линий, но и для развития способности передавать пластику во всем, что мы рисуем, в т.ч. пластики фигуры человека, полезно рисование объектов, обладающих ярко выраженной пластичностью, но самих по себе не сложных, например сильно коряжистых, ветвящихся деревьев и других подобных объектов.
Акцент также может быть как на линии (в т.ч. передаче ею фактуры объекта),
так и на тоне
Олег Торопыгин
Рисование деревьев для детей. Рисование дерева шаг за шагом
Следуйте этим пошаговым инструкциям и научитесь рисовать дерево, используя последовательность букв «y» и «v». Обязательно прокрутите вниз, чтобы увидеть полный видеоурок по рисованию деревьев для детей!
Материалы для этого урока рисования дерева для детей….

Часть этого урока, посвященная рисованию деревьев, может быть выполнена любыми принадлежностями для письма или раскрашивания, которые у вас есть: мелками и даже карандашами. Вам также понадобится бумага для рисования нужного вам размера.
Если вы собираетесь добавить цвет к готовому рисунку дерева с помощью метода рисования маркером, который я использую в этом посте, вам необходимо будет нарисовать ваше дерево несмываемым маркером. Это предотвратит запуск рисунка, когда вы позже добавите воду.
Если вы выполните этот шаг, вам понадобятся смываемые маркеры, такие как акварельные маркеры Crayola, вода и кисть.
Стилизованный рисунок дерева…
Если можете, начните этот урок рисования дерева с рассмотрения настоящего дерева в природе или на фотографиях.Будет очень полезно иметь под рукой в качестве справки или, по крайней мере, свежую память!
Идея состоит в том, чтобы уйти от рисования стилизованного дерева, которое часто выглядит как леденцы на палочке или облако на палочке. Убедитесь, что ваши ученики знают, что вы не высмеиваете эти стили деревьев. Они являются отличными отправными точками и хорошо представляют части дерева.
Но, что, замедляя, уменьшая, реально глядя и добавляя несколько ключевых деталей, они могут рисовать деревья, которые выглядят очень реалистично!
На что похоже настоящее дерево…
Укажите, когда на ветке отрастает меньшая ветвь, если она образует букву «Y» или «V».Посмотрите, как все ветви, от ствола до самых крошечных ветвей, начинаются немного толще и становятся тоньше по мере того, как они растут вверх и вниз.
Принимая во внимание эти концепции, когда ваши ученики учатся рисовать дерево, их деревья станут намного более реалистичными!
Нарисуйте ствол дерева…
Давайте начнем рисовать дерево, нарисовав ствол. Как и любая ветвь, ствол дерева будет шире внизу и станет немного уже по мере подъема.
Соедините дно неправильной волнистой линией.Продолжайте напоминать своим детям и, возможно, себе, что в природе все не идеально. Рисунки тоже не должны быть идеальными!
Сейчас самое время заполнить пространство внутри багажника чем-нибудь ценным. Добавьте какие-нибудь каракули, линии, текстуру — что угодно, чтобы заполнить пустое пространство на бумаге. Добавление цвета поможет стволу и ветвям, которые вы вскоре будете рисовать, хорошо сочетаться друг с другом!
Как нарисовать дерево буквами «y» и «v»….
Следующим дополнением к этому простому рисованию дерева является рисование 3-5 больших ветвей, которые поднимаются буквой V от основного ствола.Помните, что эти ветки сначала будут «коренастыми» и истончаются по мере того, как они тянутся вверх и наружу. Добавьте некоторое значение, чтобы заполнить пустое пространство, если ветви.
Добавьте больше букв «V» к своему простому рисованию дерева…
Этот рисунок дерева может быть как простым, так и сложным, как его захотят сделать ваши юные художники. Для каждой ветви есть меньшая ветвь, которая будет отходить от нее буквой «V», каждая ветвь идет от толстой к тонкой.
Этот рисунок может продолжаться бесконечно, пока рисунок дерева не станет идеальной формы и сложности.Нет идеального места для остановки.
Добавление цвета к вашему простому рисунку дерева….
На этом рисунок дерева завершен. Ваши ученики изучили некоторые ключевые понятия, которые облегчат рисование любого дерева!
Я решил добавить цвета нашим рисункам деревьев с помощью любимого метода, который я люблю называть рисованием маркерами. Это простой и беспроблемный способ получить вид акварельных красок. Мне нравится, как он добавляет немного цвета, но при этом позволяет просвечивать все детали рисунка дерева!
С помощью акварельного маркера, такого как обычные маркеры Crayola, добавьте несколько цветных пятен.Им не нужно быть совершенными или твердыми. В этом случае хорошо оставить немного пустого пространства.
Используя воду и чистую кисть, добавьте немного воды в окрашенные маркером области ваших рисунков деревьев. Постепенно маркер начнет разжижаться и двигаться, приобретая вид акварельной краски. Не переусердствуйте с этим шагом. Поощряйте своих детей просто добавить воды и отойти. Внешний вид маркера и воды со временем будет меняться.
Вы лучше учитесь, наблюдая? Следите за этим БЕСПЛАТНЫМ видеоуроком, пока мы учимся рисовать дерево, используя буквы «Y» и «V»….
Хватайте маркер, и мы вместе научимся рисовать дерево — простым способом!
Если вам понравилось рисовать дерево из букв, поделитесь этим постом!
Поделиться этим постом в социальных сетях — это ЛУЧШЕЕ, что вы можете сделать для меня, чтобы помочь мне расти и приносить вам еще больше нового контента!
Тест рисования дерева (тест Баума Коха): полезная помощь в диагностике когнитивных нарушений
Behav Neurol. 2015 г.; 2015: 534681.
, 1 , * , 2 , 1 , 3 , 1 , 1 , 3 и 3Микеланджело Станцани Мазерати
1 IRCCS Istituto delle Scienze Scienze Scienze di Bologna, 40139 Болонья, Италия
Corrado Matacena
2 Общая больница Имола, Центр когнитивных расстройств, Имола, 40026 Болонья, Италия
Луиза Самбати
1 IRCCS Istituto delle Scienze Scienze Scienze di Bologna, 40139 Болонья, Италия
3 Отдел науки биомедицины и нейромоторики, Университет Болоньи, 40123 Болонья, Италия
Федерико Оппи
1 IRCCS Istituto delle Scienze Scienze Scienze di Bologna, 40139 Болонья, Италия
Roberto Poda
1 IRCCS Istituto delle Scienze Scienze Scienze di Bologna, 40139 Болонья, Италия
Maddalena De Matteis
3 Отдел науки биомедицины и нейромоторики, Университет Болоньи, 40123 Болонья, Италия
Роберто Галасси
3 Отдел научных биомедицинских и нейромоторных исследований, Университет Болоньи, 40123 Болонья, Италия
1 IRCCS Istituto delle Scienze Scienze Scienze di Bologna, 40139 Болонья, Италия
2 Больница общего профиля Имола, Центр когнитивных расстройств, Имола, 40026 Болонья, Италия
3 Отдел науки биомедицины и нейромоторики, Университет Болоньи, 40123 Болонья, Италия
Академический редактор: Ахмад Бейдун
Поступила в редакцию 27 октября 2014 г . ; Принято 3 марта 2015 г.
Это статья в открытом доступе, распространяемая в соответствии с лицензией Creative Commons Attribution, которая разрешает неограниченное использование, распространение и воспроизведение на любом носителе при условии надлежащего цитирования оригинальной работы.
Эта статья была процитирована другими статьями в PMC.Аннотация
Цель . Изучить тест рисования дерева в группе пациентов с деменцией и сравнить его с группой пациентов с умеренными когнитивными нарушениями (MCI) и контрольной группой. Методы . Последовательные амбулаторные пациенты были классифицированы как пораженные деменцией (болезнь Альцгеймера (БА), лобно-височная деменция (ЛВД) и сосудистая деменция (ВД)) или ЛКН. Пациенты и контрольная группа прошли тест на рисование дерева и MMSE. Результаты . В исследование было включено 118 пациентов с AD, 19 FTD, 46 VD и 132 пациента с MCI и 90 человек из контрольной группы. Пациенты с БА рисуют деревья в глобальном масштабе меньшего размера, чем другие пациенты и контрольная группа. Пациенты с ЛВД рисуют деревья с более широким пространством, чем у пациентов с БА и ЛКН, но меньше, чем у контрольной группы, а также у пациентов с ВД.Деревья, нарисованные пациентами с MCI, занимают промежуточное положение между пациентами с БА и контрольной группой. Отношение ствола к кроне у деревьев, нарисованных пациентами с когнитивными нарушениями, выше, чем у контрольной группы, в то время как индекс размера дерева относительно площади страницы значительно меньше. Индекс размера дерева относительно размера страницы у деревьев, нарисованных пациентами с БА, меньше, чем у других пациентов с когнитивными нарушениями. Высота дерева и отношение ствола к кроне являются независимыми предикторами когнитивных нарушений. Выводы .Деревья, нарисованные пациентами с когнитивными нарушениями, отличаются от деревьев, нарисованных здоровыми людьми, с постепенной дифференциацией от легких до более соответствующих степеней когнитивных нарушений.
1. Введение
Тест рисования дерева (TDT, тест Коха-Баума) представляет собой проективное психологическое обследование, часто используемое для оценки личности в период развития [1]. Простота применения делает его полезным инструментом для выражения собственного образа и эмоциональных состояний с относительно небольшим сопротивлением.TDT широко изучался у больных шизофренией, демонстрируя хорошую способность отличать патологическое состояние от нормального состояния [2–4]. В нескольких исследованиях сообщалось о ТДТ у пожилых людей и пациентов с когнитивными нарушениями, предполагая, что это полезный инструмент для оценки психических функций в этих группах [5–10]. Чтобы оценить различия TDT между различными типами когнитивных нарушений, мы изучили TDT в группе пациентов с болезнью Альцгеймера (БА), лобно-височной деменцией (ЛВД) и сосудистой деменцией (ВД) и сравнили ее с группой легких когнитивных нарушений (УКН). пациентов и контроля.
2. Пациенты и методы
Мы оценивали последовательных амбулаторных пациентов, направленных в течение года их родственниками и врачами или которые спонтанно обратились в Центр когнитивных расстройств IRCCS Istituto delle Scienze Neurologiche of Bologna и в Центр когнитивных расстройств Генеральной Больница Имола, Италия. Все испытуемые дали информированное согласие на исследование в соответствии с Хельсинкской декларацией. Пациенты были классифицированы как деменция или нет в соответствии с критериями DSM-IV-TR [11].Классификация деменции (БА, ЛВД и ВД) и диагностика ЛКН основывались на международных критериях [12–15]. Среди родственников больных была подобрана контрольная группа, сопоставимая по возрасту и образованию.
Всем пациентам и контрольной группе было предложено нарисовать карандашом дерево на листе белой бумаги формата А4. Инструкция была следующей: «Нарисуй дерево, как хочешь». Никаких ограничений по времени не давали. Нарисованное дерево оценивалось качественно (наличие кроны, корней, ветвей, листьев и цветов; типы раскрытия ствола, т.е., верхушка ствола закрытая, открытая или шире ствола) и количественно (высота и ширина ствола, кроны, корней, наклон ствола). Качественный анализ стволов, крон и ветвей включал также характеристику формы (одиночные или двойные линии ствола и ветвей, открытая или закрытая крона). Высота и ширина были получены непосредственно в миллиметрах в соответствии с критериями, показанными на рис. Наклон туловища определяли в градусах с помощью гониометра. Отношение ствола к кроне ((высота ствола/высота кроны) × 10), соотношение кроны (ширина кроны/высота кроны) и индекс размера дерева относительно пространства страницы ((высота дерева х ширина дерева) /(высота листа бумаги × ширина листа бумаги)).Мини-тест психического состояния (MMSE) [16] проводился среди пациентов и контрольной группы экспертом, который не знал диагноза пациента и результаты TDT. Оценка MMSE была скорректирована с учетом возраста и образования в соответствии с итальянскими стандартами [17, 18].
Тест по рисованию дерева: измерение высоты и ширины кроны, корней и ствола.
Данные были проанализированы с использованием программного обеспечения для статистического анализа SPSS, версия 21.0. Мы провели описательный анализ различных параметров групп пациентов; сравнения переменных различных групп больных получены с использованием многомерной общей линейной модели с поправкой Бонферрони с уровнем значимости P = 0. 05 и пол, возраст, образование и продолжительность заболевания как ковариаты. Кроме того, множественный линейный регрессионный анализ с прямым выбором переменных использовался для исследования предикторов когнитивных нарушений.
3. Результаты
Было включено 118 пациентов с AD, 19 FTD, 46 VD, 132 MCI и 90 контрольных пациентов. Средний возраст, образование, распределение по полу и продолжительность заболевания в каждой группе указаны на рис.
Таблица 1
Клинические данные пациентов и контрольной группы.
AD | FTD | VD | MCI | Управление | ||
---|---|---|---|---|---|---|
7 n = 118 | н = 19 | n = 46 | н = 132 | n = 90 | ||
Возраст (лет) | 76.![]() | 73.16 ± 7.87 | 77.2 ± 4.86 | 77.2 ± 4.86 | 97.2 ± 4.8676.12 ± 5.65 | 96.12 ± 5.6575.11 ± 8.71 |
(Мужской / женский) | 34/84 | 10/9 | 24/22 | 60/72 | 32/58 | 32/58 |
(лет) | 5.61 ± 3.1 | 6 ± 2.![]() | 6 ± 2.66 | 5.85 ± 3.04 | 5.6 ± 3.15 | 6.69 ± 3.18 |
Доминирование справа/слева) | 116/2 | 19/0 | 46/0 | 125/7 | 85/5 | |
Длительность заболевания 30 (2с)17 ± 0,99 | 1,84 ± 0,83 | 2,17 ± 0,85 | 1,36 ± 0,54 | — |
3.1.

Качественные характеристики деревьев, нарисованных пациентами и контрольной группой, перечислены в . Существенных различий между группами не наблюдается.
Таблица 2
Качественные характеристики деревьев.
AD | FTD | VD | MCI | Органы управления | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 8 | 0 п (%) | п (%) | п (%) | п (%) | n (%) | ||||||||||||
Форма ствола (s: одна линия, d: двойная линия) | s: 23 (19%) d: 95 (81%) | 1 s: 1 %) с: 8 (17%) д: 38 (83%) | с: 11 (9%) д: 121 (91%) | с: 5 ( 6%) д: 85 (94%) | |||||||||||||
| |||||||||||||||||
Отверстие в конце багажника (0: верх багажника закрыт, 1: верх багажника открыт, 2: верх багажника шире багажника) | 0: 102 (86%) 1: 12 (10%) 2:4 (4%) | 0:19 (100%) 1:0 (0%) 2:0 (0%) | 0:43 (93%) 1: 2 (4%) 2:1 (3%) | 0:124 (94%) 1:8 (6%) 2:0 (0%) | 0:82 (91%) 1: 7 (8%) 2:1 (1%) | ||||||||||||
| |||||||||||||||||
Форма кроны (o: открытая, c: закрытая, n: незавершенная) | o: 86 (73%) c: 29 (25%) n: 3 (2%) | o : 12 (63%) c: 7 (37%) | o: 33 (72%) c: 13 (28%) | o: 106 (80%) c: 26 (20%) | о: 53 (59%) к: 37 (41%) | ||||||||||||
| |||||||||||||||||
Форма ветвей (s: одна линия, d: двойная линия, n: не выполнено) | s: 84 (71%) d: 3 (3%) n: 31 (26%) | с: 11 (58%) д: 1 (5%) н: 5 (37%) | с: 30 (65%) д: 5 (11%) н: 11 (24%) | s: 101 (77%) d: 5 (4%) n: 26 (19%) | s: 53 (59%) d: 13 (14%) n: 24 (27%) | ||||||||||||
| |||||||||||||||||
Листья | 24 (20%) | 5 (26%) | 9 (20%) | 41 (31%) | 28 (31%) | ||||||||||||
| |||||||||||||||||
Цветы | 0 | 0 | 2 (4%) | 6 (5%) | 4 (4%) 2 |
AD | FTD | VD | MCI | Управление | Управление по сравнению с | AD против | FTD против | VD против | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Среднее ± SD | Среднее ± SD | Среднее ± SD | Среднее ± SD | Среднее ± SD | АД | FTD | В.![]() | MCI | FTD | В.Д. | MCI | В.Д. | MCI | MCI | |||
ММСЭк | 17.61 ± 3.89 | 18.68 ± 6.42 | 19.52 ± 3.28 | 19.52 ± 3.28 | 9.52 ± 3.2826.09 ± 1,77 | 28.04 ± 1,42 | **** | **** 90** 9029 | **** | **** | N.![]() | ∗∗∗ | ∗∗∗∗ | н.с. | **** | **** | **** |
Соотношение ствола до короны | 12.62 ± 7.59 | 12.75 ± 4.91 | 12.29 ± 6.12 | 11.04 ± 5.37 | 8,35 ± 3,72 | * ∗∗∗ | ∗∗ | ∗∗∗ | ∗∗∗ | н.![]() | н.с. | н.с. | н.с. | н.с. | н.с. | ||
Коэффициент короны | |||||||||||||||||
1,51 ± 0,61 | 1,63 ± 0,57 | 1,68 ± 0,73 | 1,53 ± 0,45 | 1,45 ± 0,48 | Н. С. | н.с. | * | н.с. | н.с. | н.![]() | н.с. | н.с. | н.с. | н.с. | |||
Размер дерева относительно пространства страницы | 0.03 ± 0,03 | 0,13 ± 0.11 | 0,1 ± 0.68 | 0,08 ± 0,06 | 0,23 ± 0.19 | **** | **** | **** | **** | * ∗∗∗ | ∗∗∗∗ | ∗∗∗∗ | нс | **** | * | * | |
Дерево высота | 52.![]() | 109.89 ± 38,98 | 91.41 ± 28.35 | 80.77 ± 28.87 | 132.61 ± 57.81 | **** | **** | **** | **** | **** | **** | **** | * | **** | ** 90** | ** | |
Дерево ширина | 35.![]() | 70 ± 39.08 | 65.43 ± 26.86 | 56.67 ± 25.6 | 96.57 ± 41.67 | **** | **** | **** | **** | * ∗∗∗ | ∗∗∗∗ | ∗∗∗∗ | нс | * | * | * | *|
Высота ствола | 26.64 ± 15.![]() | 56.74 ± 22.83 | 42.87 | 42.87 ± 211.11 | 38.11 ± 17.71 | 52.73 ± 23,74 | **** | Н. С. | сущ.с. | **** | **** | **** | **** | **** | * 90** | * 90*** | * |
Ширина багажника | 8.![]() | 13.58 ± 10,32 | 11,02 ± 7,99 | 9,85 ± 6,84 | 13,23 ± 7,78 | ∗∗∗∗ | нс | н.с. | ∗∗ | ∗∗ | ∗ | н.с. | н.с. | н.с. | н.с. | ||
Наклон багажника | 89.39 ± 8,79 | 86,89 ± 4,65 | 88,09 ± 5,64 | 89,59 ± 6,14 | 90,7 ± 4,21 | н.![]() | н.с. | н.с. | н.с. | н.с. | н.с. | н.с. | н.с. | н.с. | н.с. | ||
Корона Высота | 23.86 ± 13.11 | 47,47 ± 21.12 | 41.12 | 41.04 ± 15.67 | 38.34 ± 16.47 | 72.46 ± 39.22 | 92.46 ± 39,22**** | **** | **** | ∗∗∗∗ | ∗∗∗∗ | ∗∗∗∗ | ∗∗∗∗ | н.![]() | * | н.с. | |
крона ширина | 34.71 ± 21.86 | 75.11 ± 39.53 | 64.8 ± 26.48 | 56.48 ± 25.91 | 95.91 ± 41.22 | 95.9130 **** | ** | **** | * ∗∗∗ | ∗∗∗∗ | ∗∗∗∗ | ∗∗∗∗ | нс | ∗∗ | н.![]() | ||
Высота корня | 1,59 ± 4,63 | 5,68 ± 8,7 | 4,5 ± 8,45 | 4.31 ± 7,83 | 7,42 ± 13,34 | ∗∗∗∗ | н.с. | ∗ | ∗∗ | ∗ | ∗ | ∗ | н.с. | н.с. | н.с. | ||
Корневая ширина | 353 ± 12.![]() | 15.84 ± 23.13 | 15.84 ± 23.13 | 9.41 ± 16.48 | 9.33 ± 16.89 | 9.33 ± 16.8918.44 ± 32.19 | **** | Н. С. | ∗∗ | ∗∗∗∗ | ∗∗ | н.с. | ∗∗ | нет.с. | н.с. | н.с. |
Отношение ствола к кроне у деревьев, нарисованных пациентами с деменцией и MCI, выше, чем у контрольной группы, в то время как индекс размера дерева относительно площади страницы значительно меньше. Кроме того, индекс размера дерева по отношению к пространству страницы деревьев, нарисованных пациентами с БА, меньше, чем у других пациентов с когнитивными нарушениями, деменцией или с MCI. Один и тот же индекс деревьев, нарисованных пациентами с ЛВД, отличается от БА и MCI, но не от пациентов с ВД.Коэффициент кроны деревьев, нарисованных больными ВБ, значительно выше, чем в контроле.
Модель множественной линейной регрессии с прямым выбором переменных включает в качестве независимых предикторов когнитивных нарушений переменные высоты дерева и отношения ствола к кроне.
4. Обсуждение
TDT был проанализирован у пожилых людей и пациентов с когнитивными нарушениями [5–10]. В целом авторы обнаружили, что пожилые люди и в основном пациенты с когнитивными нарушениями рисуют деревья плохих форм небольшого размера [7, 8] с постепенно уменьшающимся пространством для рисования от нормального до слабоумного уровня [6].В целом они не различают разные типы деменции, кроме альцгеймеровского типа [5], и предлагают ТДТ как полезный инструмент для оценки психических функций пожилых людей [7–10].
В нашей выборке пациенты с когнитивными нарушениями рисуют деревья меньшего размера, чем здоровые. Деревья, нарисованные пациентами с БА, в частности, значительно меньше по сравнению с деревьями, нарисованными другими пациентами с когнитивными нарушениями, деменцией или MCI, а также контрольной группой. Что касается контрольной группы, пациенты с БА рисуют меньшие плохо детализированные деревья с повышенным отношением ствола к кроне и уменьшенным индексом размера дерева по отношению к размеру страницы, то есть с меньшей кроной и меньшим занимаемым пространством.Пациенты с MCI рисуют деревья, промежуточные по размеру между пациентами с БА и здоровыми людьми, что предполагает своего рода прогрессию от легкой до более высокой степени когнитивных нарушений. Различные размеры дерева по сравнению с контролем у пациентов с AD и MCI связаны как с увеличением отношения ствола к кроне, так и со снижением индекса размера дерева по отношению к пространству на странице, что является преобладанием ствол по отношению к кроне дерева и к общему уменьшенному занимаемому пространству. Пациенты с FTD отличаются от AD и MCI индексом размера дерева относительно пространства страницы: фактически они рисуют деревья больше, чем у пациентов с AD и MCI, но меньше, чем контрольная группа.И наоборот, этой существенной разницы не существует между пациентами с ЛВД и ВД.
В глобальном масштабе соотношение ствола и кроны и индекс размера дерева относительно пространства страницы отличают пациентов с когнитивными нарушениями, с деменцией или нет, от контрольной группы, а индекс размера дерева относительно пространства страницы также отличает пациентов с ЛВД от пациентов с AD и MCI. Кроме того, общая высота дерева и отношение ствола к кроне являются предикторами когнитивных нарушений в нашей выборке пациентов.
Известно, что отношение туловища к макушке обратно пропорционально развитию языковых способностей и абстрактного мышления в ходе развития [1, 19, 20].Точно так же у наших пациентов соотношение туловища и макушки значительно выше по сравнению с контрольной группой с увеличением от пациентов с MCI до пациентов с деменцией, что позволяет предположить, что лингвистические способности и абстрактное мышление постепенно ухудшаются с ухудшением когнитивных функций. Кроме того, уменьшение общего размера дерева у пациентов с деменцией и MCI также может быть объяснено прогрессирующим нарушением конструктивного праксиса и зрительно-пространственных функций по мере когнитивного ухудшения.Наконец, рассматривая постепенное уменьшение размера дерева у пациентов с когнитивными нарушениями как выражение более низкого самосознания [1], можно предположить своего рода регрессию личности.
У взрослых ТДТ также изучали у психически больных (расстройства пищевого поведения и шизофрения) [2–4, 21]. Больные с расстройствами пищевого поведения рисуют в основном деревья меньшего размера, чем контрольная группа, как по общему размеру, так и по ширине ствола [21]. У шизофреников дерево тоже маленькое, а ствол и ветви преимущественно однолинейные [3, 4].
Таким образом, как психически больные, так и пациенты с когнитивными нарушениями в равной степени склонны рисовать деревья меньшего размера и неправильной формы, чем здоровые люди. Тем не менее, некоторые характеристики различаются между двумя группами, например, верхняя часть туловища, которая обычно закрыта у здоровых людей и у пациентов с когнитивными нарушениями, тогда как у шизофреников она обычно открыта [3, 22, 23], что может указывать на спутанность сознания. между собой и чужим [1].
Наши данные должны быть дополнительно подтверждены в более широкой выборке пациентов, отобранных в соответствии с расширенными критериями болезни Альцгеймера и подтвержденными результатами биомаркеров и передовыми методами нейровизуализации.
В заключение, мы считаем, что TDT может быть полезным инструментом для ориентировки в диагностике когнитивных нарушений, и это может быть простой тест для врачей общей практики и в специализированных амбулаторных клиниках. Кроме того, его можно было бы включить в обширные нейропсихологические батареи, изучающие когнитивные функции пациентов с когнитивными нарушениями, чтобы попытаться найти возможный и простой подход к изучению нормального и патологического старения.
Конфликт интересов
Авторы заявляют об отсутствии конфликта интересов.
Ссылки
1. Koch K. Der Baumtest. Der Baumzeichenversuch als psichodiagnostiches Hilfsmittel . Берн, Швейцария: Verlag Hans Huber; 1949.




Билла Милля
Когда мне нужно было нарисовать несколько деревьев для проекта, который я делал, я предполагал, что будет классический простой алгоритм рисования аккуратных деревьев. Вместо этого я обнаружил гораздо более интересное: не только компоновка дерева является NP-полной задачей 1 , но и алгоритмы рисования дерева имеют долгую и интересную историю.Я буду использовать историю алгоритмов рисования деревьев, чтобы по очереди вводить основные концепции, используя каждую из них для построения полного алгоритма O(n) для рисования привлекательных диаграмм деревьев.
В чем проблема?
рисунок 1 Имея дерево T, мы попытаемся нарисовать его таким образом, чтобы зритель счел его привлекательным.

Чтобы сохранить результаты алгоритмов рисования дерева, мы создадим структуру данных DrawTree, отражающую дерево, которое мы рисуем; единственное, что мы будем предполагать, это то, что каждый узел дерева может выполнять итерацию по своим дочерним элементам. Базовую реализацию DrawTree можно найти в листинге 1.
класс DrawTree (объект): def __init__(я, дерево, глубина=0): селф.х = -1 self.y = глубина само.дерево = дерево self.children = [DrawTree(t, depth+1) для t в дереве]
По мере усложнения наших методов будет возрастать и сложность DrawTree.На данный момент он просто присваивает -1 координате x каждого узла, глубине узла — его координате y и сохраняет ссылку на корень текущего дерева. Затем он создает список дочерних элементов этого узла, рекурсивно создавая DrawTree для каждого из них. Таким образом, мы создаем DrawTree, который обертывает дерево, которое он собирается рисовать, и добавляет к каждому узлу информацию, относящуюся к рисованию.
По мере того, как в этой статье мы реализуем более совершенные алгоритмы, мы будем использовать наш опыт работы с каждым из них, чтобы помочь нам сформулировать принципы, которые помогут нам в создании следующего алгоритма.Хотя создание «привлекательной» древовидной диаграммы — дело вкуса, эти принципы помогут нам улучшить результаты наших программ.
В начале был Кнут
Особый тип рисунка, который мы будем делать, это тот, где корень находится наверху, его дочерние элементы находятся под ним и так далее. Этот тип диаграмм и, следовательно, весь этот класс задач во многом обязан Дональду Кнуту 2 , у которого мы почерпнем наши первые два принципа:Принцип 1 : Края дерева не должны пересекаться.
Принцип 2 : Все узлы на одной глубине должны быть нарисованы на одной горизонтальной линии. Это помогает прояснить структуру дерева.
рисунок 2
Преимущество алгоритма Кнута в простоте и молниеносной скорости, но он работает только с бинарными деревьями и может давать довольно бесформенные рисунки. Это простой обход дерева по порядку с глобальным счетчиком, который используется как переменная x, а затем увеличивается на каждом узле.Код в листинге 2 демонстрирует эту технику.
я = 0 def knuth_layout (дерево, глубина): если дерево.left_child: knuth_layout (tree.left_child, глубина + 1) дерево.х = я дерево.y = глубина я += 1 если дерево.right_child: knuth_layout (tree.right_child, глубина + 1)
Как видно из рисунка 2, этот алгоритм создает дерево, удовлетворяющее Принципу 1, но не особенно привлекательное. Вы также можете видеть, что диаграммы Кнута будут очень быстро расширяться, поскольку они не будут повторно использовать координаты x, даже если дерево может быть значительно уже. Чтобы избежать этой пустой траты места, мы введем третий принцип:
Принцип 3 : Деревья должны быть нарисованы как можно более узко.
Краткое напоминание
Прежде чем мы перейдем к более продвинутым алгоритмам, возможно, стоит остановиться и согласовать термины, которые мы будем использовать в этой статье. Во-первых, мы собираемся использовать метафору генеалогических деревьев при описании отношений между нашими узлами данных. У узла может быть дочерних узла, ниже него, родственных узла, слева или справа, и родителя, над ним.Мы уже говорили об обходе дерева в порядке, и мы также собираемся поговорить о обходах до заказа и после заказа . Вы, вероятно, видели эти три термина в тесте «Структуры данных» давным-давно, но если вы не В последнее время я играл с деревьями, они, возможно, стали немного туманными.
Типы обхода просто определяют, когда мы выполняем обработку, которую необходимо выполнить на данном узле. 2) или квадратичный .Все остальное мы будем называть O(n) или linear . Если вам нужна дополнительная информация, документы, на которые есть ссылки в конце этой статьи, содержат гораздо больше информации о характеристиках времени выполнения этих алгоритмов.
Снизу вверх
рисунок 3 Чарльз Уэзерелл и Альфред Шеннон 3 появились в 1979 году, через 8 лет после того, как Кнут представил проблему компоновки дерева и представил целый ряд инновационных методов. Во-первых, они показали, как сгенерировать дерево минимальной ширины, удовлетворяющее нашим первым трем принципам.Просто сохраняйте следующий доступный слот в каждой строке, просматривайте дерево в обратном порядке, назначайте узлу этот слот и увеличивайте счетчик слотов, как показано в листинге 3.
nexts = [0] * максимальная_глубина_дерева def Minimum_ws (дерево, глубина = 0): tree.x = следующий[глубина] дерево.y = глубина следующий[глубина] += 1 для c в дереве.дети: Minimum_ws (дерево, с)
Хотя это и удовлетворяет всем нашим принципам, возможно, вы согласитесь, что результат уродлив. Даже в таком простом примере, как на рис. 3, трудно быстро определить взаимосвязь между узлами, и все кажется слитным воедино.Пришло время ввести еще один принцип, который поможет очистить как дерево Кнута, так и дерево минимальной ширины:
.Принцип 4 : Родитель должен быть в центре своих детей.
фигурка 4
До сих пор нам удавалось обходиться очень простыми алгоритмами рисования деревьев, потому что нам не приходилось учитывать локальный контекст; мы полагались на глобальные счетчики, чтобы наши узлы не перекрывали друг друга. Чтобы соблюсти принцип, согласно которому родительский элемент должен находиться в центре своих дочерних элементов, нам необходимо учитывать локальный контекст каждого узла, поэтому необходимо несколько новых стратегий.
Первая стратегия, предложенная Уэзереллом и Шенноном, состоит в том, чтобы строить деревья снизу вверх с обходом дерева в обратном порядке вместо того, чтобы идти сверху вниз, как в листинге 2, или через середину, как в листинге 3. Как только вы посмотрите на дерево таким образом, центрирование родителя — простая операция — просто разделите его дочерние координаты x пополам.
Тем не менее, мы должны помнить, что нужно помнить о левой стороне дерева при построении правой. На рис. 4 показан сценарий, в котором правая сторона дерева была выдвинута вправо, чтобы приспособиться к левой.Чтобы выполнить это разделение, Уэтерелл и Шеннон поддерживают массив следующих доступных мест, представленных в листинге 2, но используют следующее доступное место только в том случае, если центрирование родителя приведет к тому, что правая сторона дерева перекроет левую сторону.
The Mods and the Rockers
Прежде чем мы начнем рассматривать код, давайте подробнее рассмотрим последствия нашего построения дерева снизу вверх. Мы дадим каждому узлу следующую доступную координату x, если это лист, и центрируем его над его дочерними элементами, если это ветвь.Однако, если центрирование ветви приведет к конфликту с другой частью дерева, нам нужно переместить ее вправо достаточно далеко, чтобы избежать конфликта.
Когда мы перемещаем ветвь вправо, мы должны переместить все ее дочерние элементы, иначе мы потеряем центрированный родительский узел, над поддержанием которого мы так усердно работали. Легко придумать наивную функцию для перемещения ветки и ее поддеревьев вправо на некоторое число:
def move_right (ветка, n): ветвь.2).Чтобы решить эту проблему, мы дадим каждому узлу дополнительный элемент с именем
mod
. Когда мы подойдем к ветке, которую нам нужно переместить вправо наn
пробелов, мы добавимn
к ее координатеx
и ее значениюпо модулю
, и успешно продолжим алгоритм размещения. Поскольку мы движемся снизу вверх, нам не нужно беспокоиться о том, что нижняя часть наших деревьев вступит в конфликт (мы уже показали, что это не так), и мы подождем до тех пор, пока не переместим их в правильно.После первого обхода дерева мы запускаем второй обход дерева, чтобы переместить вправо ветки, которые нужно переместить вправо.
Поскольку мы будем посещать каждый узел один раз и выполнять над ним только арифметические операции, мы можем быть уверены, что этот обход будет O(n), как и первый, и вместе они будут также O(n).
Код в листинге 5 демонстрирует как центрирование родительских узлов, так и использование значений mod для повышения эффективности нашего кода.
из коллекций импортировать defaultdict класс DrawTree (объект): def __init__(я, дерево, глубина=0): себя.х = -1 self.y = глубина само.дерево = дерево self.children = [DrawTree(t, depth+1) для t в дереве] селф.мод = 0 деф-макет (дерево): настройка(дерево) аддмоды(дерево) дерево возврата настройка def (дерево, глубина = 0, nexts = нет, смещение = нет): если nexts равно None: nexts = defaultdict(лямбда: 0) если смещение равно None: offset = defaultdict(лямбда: 0) для c в дереве.дети: установка(с, глубина+1, следующие, смещение) дерево.y = глубина если не лен(дерево.дети): место = следующее [глубина] дерево.х = место Элиф Лен(дерево.дети) == 1: место = дерево.дети[0].x - 1 еще: s = (дерево.дети[0].х + дерево.дети[1].х) место = с/2 смещение[глубина] = max(смещение[глубина], следующее[глубина]-место) если лен(дерево.дети): tree.x = место + смещение[глубина] следующий[глубина] += 2 tree.mod = смещение[глубина] def addmods(дерево, modsum=0): дерево.x = дерево.x + модсумма modsum += дерево.смещение для t в дереве.дети: addmods(t, модсумма)
Деревья как блоки
Несмотря на то, что листинг 5 дает хорошие результаты во многих случаях, он может привести к появлению некоторых изуродованных деревьев, таких как дерево на рис. 5 ( ed: к сожалению, затерянное в песках времени ).Еще одна трудность в интерпретации деревьев, созданных алгоритмом Уэзерелла-Шеннона, заключается в том, что одна и та же древовидная структура, помещенная в другую точку дерева, может отображаться по-разному.Чтобы избежать этого, мы украдем принцип из статьи Эдварда Рейнгольда и Джона Тилфорда 4 : .
Принцип 5 : Поддерево должно быть отрисовано одинаково, независимо от того, в какой части дерева оно находится.
Несмотря на то, что это может немного расширить наши рисунки, этот принцип поможет сделать их более информативными.Это также поможет упростить наш обход дерева снизу вверх, поскольку одним из его следствий является то, что после того, как мы выяснили координаты X поддерева, нам нужно только переместить его влево или вправо как единое целое.
Вот набросок алгоритма, реализованного в листинге 6:
• Обход дерева в обратном порядке • если узел является листом, присвойте ему координату x, равную 0 • в противном случае поместите его правое поддерево как можно ближе к левому без конфликтов • Используйте ту же технику модификации, что и в предыдущем алгоритме, чтобы переместить дерево за время O(n). • поместить узел на полпути между его дочерними элементами • Сделайте второй обход дерева, добавив накопленное значение мода к координате xЭтот алгоритм прост до гениальности, но для его выполнения нам придется немного усложнить его.
![]()
Контуры
фигурка 6 Контур дерева представляет собой список максимальных или минимальных координат стороны дерева. На рисунке 6 есть левое дерево и правое дерево с наложенными координатами x каждого узла. Если мы проследим левую сторону левого дерева, взяв минимальную координату x каждого уровня, мы получим [1,1,0], который мы называем левым контуром дерева. Если мы проследим правую сторону, взяв крайнюю правую координату x с каждого уровня, мы получим [1,1,2], что является правым контуром дерева.Чтобы найти левый контур правого дерева, мы снова берем x-координату самого левого узла на каждом уровне, что дает нам [1,0,1]. На этот раз у контура есть интересное свойство: не все узлы связаны отношениями родитель-потомок; 0 на втором уровне не является родителем 1 на третьем.
Если бы мы соединили эти два дерева в соответствии с листингом 6, мы могли бы найти правый контур левого дерева и левый контур правого дерева.
Тогда мы могли бы легко найти наименьшую величину, необходимую для смещения правого дерева вправо, чтобы оно не перекрывало левое дерево.Простой способ сделать это приведен в листинге 7.
от оператора импорта lt, gt def push_right (влево, вправо): wl = контур (слева, lt) wr = контур (справа, gt) вернуть max(x-y для x,y в zip(wl, wr)) + 1 контур определения (дерево, комп, уровень = 0, продолжение = нет): если не продолжение: продолжение = [дерево.x] Элиф Лен (продолжение)Если мы запустим процедуру
push_right()
из листинга 7 на дереве с рис. 6, то получим [1,1,2] как правый контур левого дерева и [1,0,1] как левый контур правого дерева.2) операция, Рейнгольд и Тилфорд вводят понятие, путано называемое потоками , которые совсем не похожи на потоки, используемые для параллельного выполнения.
фигурка 7Потоки — это метод сокращения времени, необходимого для сканирования поддерева в поисках его контура, путем создания связей между узлами на контуре, если один из них еще не является дочерним по отношению к другому.
На рис. 7 пунктирная линия представляет собой поток, а сплошная линия представляет отношения родитель-потомок.
Мы также можем воспользоваться тем фактом, что если одно дерево глубже другого, нам нужно спуститься только до более короткого дерева. Все, что глубже этого, не повлияет на необходимое разделение между двумя деревьями, поскольку между ними не может быть конфликтов.
Используя потоки и перемещаясь настолько глубоко, насколько это необходимо, мы можем получить контур дерева и установить линейное время потоков с помощью процедуры, описанной в листинге 8.
защита следующего права (дерево): если дерево.поток: вернуть дерево.поток если дерево.дети: вернуть дерево.дети[-1] иначе: вернуть None определение следующего левого (дерево): если tree.thread: вернуть tree.thread если дерево.дети: вернуть дерево.дети[0] иначе: вернуть None контур def (слева, справа, max_offset=0, left_outer=None, right_outer=None): если не left_outer: левый_внешний = левый если не правый_внешний: right_outer = правый если left.x - right.x > max_offset: max_offset = влево.x - вправо.Икс lo = следующий слева (слева) li = следующий справа (слева) ri = следующий слева (справа) ro = следующий справа (справа) если ли и ри: контур возврата (li, ri, max_offset, lo, ro) вернуть максимальное_смещение
Легко видеть, что эта процедура посещает только два узла на каждом уровне сканируемого поддерева. В статье есть аккуратное доказательство того, что это происходит за линейное время; Рекомендую прочитать, если интересно.
Соединяем все вместе
Процедура контура, представленная в листинге 8, аккуратна и быстра, но она не будет работать с методом модуляции, который мы обсуждали ранее, потому что фактическое значение x узла равно значению x узла плюс сумма всех модификаторов на пути от себя к корню.Чтобы справиться с этим случаем, нам нужно добавить еще пару битов сложности в наш контурный алгоритм.Первое, что нам нужно сделать, это сохранить две дополнительные переменные, сумму модификаторов в левом поддереве и сумму модификаторов в правом поддереве.
Эти суммы необходимы для вычисления фактического положения каждого узла на контуре, чтобы мы могли проверить, не конфликтует ли он с узлом на противоположной стороне. См. листинг 9.
контур def (слева, справа, max_offset = нет, loffset = 0, roffset = 0, left_outer = нет, right_outer = нет): дельта = влево.x + loffset - (right.x + roffset) если не max_offset или delta > max_offset: максимальное_смещение = дельта если не left_outer: левый_внешний = левый если не правый_внешний: right_outer = правый вот = следующий слева (левый_внешний) li = следующий справа (слева) ri = следующий слева (справа) ro = следующий справа (правый_внешний) если ли и ри: loffset += левый.mod roffset += право.mod возврат контура (li, ri, max_offset, loffset, roffset, lo, ro) return (li, ri, max_offset, loffset, roffset, left_outer, right_outer)Еще одна вещь, которую нам нужно сделать, это вернуть текущее состояние функции при выходе, чтобы мы могли установить правильное смещение для потоковых узлов.
Получив эту информацию, мы готовы рассмотреть функцию, которая использует код из листинга 8 для размещения двух деревьев как можно ближе друг к другу:
def fix_subtrees (слева, справа): li, ri, diff, loffset, roffset, lo, ro \ = контур (слева, справа) разница += 1 diff += (right.x + diff + left.x) % 2 right.mod = разница right.x += разница если правильно.дети: roffset += разница если ри, а не ли: lo.thread = ри lo.mod = roffset - loffset элиф ли и не ри: ро.нить = ли ro.mod = loffset - roffset возврат (слева.х + справа.х) / 2После выполнения контурной процедуры мы добавляем 1 к максимальной разнице между левым и правым деревьями, чтобы они не конфликтовали друг с другом, затем добавляем еще одну, если средняя точка между ними нечетная. Это позволяет сохранить удобное свойство для тестирования — все узлы имеют целочисленные координаты x без потери точности.
Затем мы перемещаем правое дерево на заданную величину вправо.
Помните, что причина, по которой мы добавляем diff к координате x и сохраняем ее в значении mod, заключается в том, что значение mod применяется только к узлам ниже текущего узла.Если правое поддерево имеет более одного узла, мы добавляем diff к roffset, так как все потомки правого узла будут перемещены так далеко вправо.
Если левая часть дерева была глубже правой или наоборот, нам нужно установить резьбу. Мы просто проверяем, продвинулся ли указатель узла для одной стороны дальше, чем указатель узла для другой стороны, и, если это так, устанавливаем поток снаружи более мелкого дерева внутрь более глубокого.
Чтобы правильно обрабатывать значения модификатора, о которых мы говорили ранее, нам нужно установить специальное значение модификатора на многопоточных узлах.Поскольку мы уже обновили наше значение смещения вправо, чтобы отразить движение правого дерева вправо, все, что нам нужно сделать здесь, это установить значение мода нитевидного узла на разницу между смещением более глубокого дерева и им самим.
![]()
Теперь, когда у нас есть код для нахождения контуров деревьев и размещения двух деревьев как можно ближе друг к другу, мы можем легко реализовать описанный выше алгоритм. Привожу остальной код без комментариев:
деф-макет (дерево): вернуть addmods (настройка (dt)) def addmods (дерево, мод = 0): дерево.х += мод для c в дереве.дети: addmods(c, мод+дерево.мод) дерево возврата Настройка защиты (дерево, глубина = 0): если len(дерево.дети) == 0: дерево.х = 0 дерево.y = глубина дерево возврата если len(дерево.дети) == 1: дерево.x = установка (дерево.дети[0], глубина+1).x дерево возврата слева = установка(дерево.дети[0], глубина+1) справа = установка (дерево.дети[1], глубина+1) tree.x = fix_subtrees (слева, справа) дерево возврата
Расширение для N-арных деревьев
Теперь, когда мы, наконец, получили алгоритм рисования бинарных деревьев, удовлетворяющий нашим принципам, хорошо выглядящий в общем случае и работающий за линейное время, естественно подумать о том, как распространить его на деревья с любым количеством дочерних элементов.Если вы дочитали до этого момента, вы, вероятно, думаете, что нам следует просто взять замечательный алгоритм, который мы только что определили, и применить его ко всем дочерним элементам узла.
Расширение предыдущего алгоритма для работы с n-мерными деревьями может выглядеть примерно так:
- Обход дерева в обратном порядке
- если узел является листом, присвойте ему координату x 0
- в противном случае для каждого из его дочерних элементов поместите дочерний элемент как можно ближе к его левому брату
- разместить родительский узел посередине между крайним левым и крайним правым потомком
Принцип 6 : Дочерние узлы родительского узла должны быть равномерно распределены.
фигурка 8
Для того, чтобы нарисовать n-арное дерево симметрично и быстро, нам понадобятся все приемы, которые мы разработали до сих пор, плюс пара новых.Благодаря недавней статье Christoph Buchheim et al. 5 , у нас есть все необходимые инструменты для этого, и мы по-прежнему можем рисовать наши деревья в линейном времени.
Чтобы изменить приведенный выше алгоритм, чтобы он соответствовал Принципу 6, нам понадобится метод для разделения деревьев между двумя более крупными конфликтующими деревьями. Самый простой способ — каждый раз, когда конфликтуют два дерева, делить доступное пространство на количество деревьев и сдвигать каждое дерево так, чтобы оно было отделено на это количество от своих братьев и сестер.Например, на рис. 7 расстояние n между большими деревьями справа и слева и три дерева между ними. Если бы мы просто разместили первое дерево посередине на расстоянии n/3
от левого дерева, следующее дерево на расстоянии n/3
от него и так далее, мы бы получили дерево, удовлетворяющее Принципу 6. 2).
Исправление этой проблемы аналогично исправлению предыдущей проблемы с переключением передач, для которой мы представили мод
. Вместо того, чтобы сдвигать каждое поддерево посередине каждый раз, когда возникает конфликт, мы сохраним значение, необходимое для смещения деревьев посередине, а затем применим сдвиги после размещения всех дочерних элементов узла.
Чтобы вычислить правильное значение, на которое мы хотим сдвинуть средние узлы, нам нужно найти количество деревьев между двумя конфликтующими узлами.Когда у нас было только два дерева, было очевидно, что любой конфликт происходит между левым и правым деревом. Когда может быть любое количество деревьев, выяснение того, какое дерево вызывает конфликт, становится проблемой.
Чтобы справиться с этой задачей, мы введем переменную default_ancestor и добавим еще один элемент в нашу древовидную структуру данных, которую мы назовем предком
. Узел-предок указывает либо на себя, либо на корень дерева, которому он принадлежит. Когда нам нужно найти, к какому дереву принадлежит узел, мы будем использовать член-предок, если он установлен, но вернемся к дереву, на которое указывает
default_ancestor
.
Когда мы размещаем первое поддерево узла, мы просто устанавливаем default_ancestor так, чтобы оно указывало на это поддерево, и предполагаем, что любой конфликт, вызванный следующим деревом, возникает с первым. После размещения второго поддерева мы различаем два случая. Если второе поддерево менее глубокое, чем первое, мы обходим его правый контур, устанавливая член-предок равным корню второго дерева. В противном случае второе дерево больше первого, а это означает, что любые конфликты со следующим деревом, которое должно быть размещено, будут со вторым деревом, поэтому мы просто устанавливаем default_ancestor так, чтобы оно указывало на него.
Итак, без лишних слов, реализация алгоритма O(n) для компоновки привлекательных деревьев на Python, представленная Буххеймом, представлена в листинге 12.
класс DrawTree (объект): def __init__(я, дерево, родитель=Нет, глубина=0, число=1): селф.х = -1. self.y = глубина само.дерево = дерево self.children = [DrawTree(c, self, depth+1, i+1) для я, с в перечислении (tree.children)] self.parent = родитель себя.нить = нет самосмещение = 0 self.ancestor = я self.change = self.shift = 0 self._lmost_sibling = Нет #это номер узла в его группе братьев и сестер 1..n self.number = число деф левый_брат (я): п = нет если сам.родитель: для узла в self.parent.children: если node == self: вернуть n иначе: n = узел вернуть н защита get_lmost_sibling (я): если не сам._lmost_sibling и self.parent и self != \ сам.родитель.дети[0]: self._lmost_sibling = self.parent.children[0] вернуть себя._lmost_sibling leftmost_sibling = свойство (get_lmost_sibling) деф буххейм (дерево): dt = первая прогулка (дерево) second_walk (дт) вернуть ДТ def firstwalk(v, расстояние=1.): если len(v.children) == 0: если v.leftmost_sibling: v.x = v.left_brother().x + расстояние еще: х = 0. еще: default_ancestor = v.дети[0] для w в v.children: первая прогулка (ж) default_ancestor = распределение(w, default_ancestor, расстояние) execute_shifts(v) середина = (v.children[0].x + v.children[-1].x) / 2 элл = с.дети[0] обр = в.дети[-1] w = v.left_brother() если ш: v.x = w.x + расстояние v.mod = v.x - середина еще: v.x = середина вернуть v распределение по определению (v, default_ancestor, расстояние): ш = v.левый_брат() если w не None: # в нотации Бухгейма: #i == внутренний; о == внешний; р == справа; л == слева; вир = вор = v вил = ш vol = v.
leftmost_sibling сэр = сор = v.mod sil = vil.mod соль = объем мод в то время как vil.right() и vir.left(): зло = зло.право() вир = вир.слева() объем = объем слева () вор = вор.право() вор.предок = v shift = (vil.x + sil) - (vir.x + sir) + расстояние если сдвиг > 0: a = предок (vil, v, default_ancestor) move_subtree (а, v, сдвиг) сэр = сэр + сдвиг сор = сор + сдвиг сил += с.мод сэр += vir.mod соль += vol.mod сор += вор.мод если vil.right(), а не vor.right(): vor.thread = vil.right() vor.mod += sil - сор еще: если vir.left(), а не vol.left(): vol.thread = vir.left() vol.mod += сэр - соль default_ancestor = v вернуть default_ancestor def move_subtree (wl, wr, shift): поддеревья = wr.
number - wl.number wr.change -= сдвиг / поддеревья вр.сдвиг += сдвиг wl.change += сдвиг / поддеревья wr.x += сдвиг wr.mod += сдвиг защита execute_shifts (v): сдвиг = изменение = 0 для w в v.children[::-1]: w.x += сдвиг w.mod += сдвиг изменить += w.change сдвиг += w.shift + изменение предок защиты (vil, v, default_ancestor): если vil.ancestor в v.parent.children: вернуть вил.предок еще: вернуть default_ancestor def second_walk(v, м=0, глубина=0): х += м vy = глубина для w в v.дети: second_walk(ш, м + v.mod, глубина+1, мин)
Заключение
Я упустил некоторые моменты в этой статье просто потому, что я чувствовал, что важнее попытаться представить логическое развитие окончательного алгоритма, который я представил, чем перегружать статью чистым кодом. Если вам нужна дополнительная информация или вы хотите увидеть древовидные структуры данных, которые я использовал в различных листингах кода, вы можете перейти на http://github.
Сноски
1 К. Мариотт, NP-полнота неупорядоченного древовидного макета минимальной ширины, Journal of Graph Algorithms and Applications, vol. 8, нет. 3, стр. 295-312 (2004). http://www.emis.de/journals/JGAA/accepted/2004/MarriottStuckey2004.8.3.pdf2 Д. Э. Кнут, Оптимальные бинарные деревья поиска, Acta Informatica 1 (1971)
3 К. Уэтерелл, А. Шеннон, Аккуратные рисунки деревьев, Транзакции IEEE по программной инженерии.Том 5, Выпуск 5
4 Э. М. Рейнгольд, Дж. С. Тилфорд, Аккуратные рисунки деревьев, IEEE Transactions on Software Engineering. Том 7, Выпуск 2
5 К. Буххейм, М. Дж. Унгер и С. Лейперт. Улучшение алгоритма Уокера для работы за линейное время. В проц. Графический рисунок (GD), 2002 г. http://citeseerx.
Post Categories: Дерево