Top.Mail.Ru
 
Что такое структура дерева данных?
1.Структура хранения. Список.
Представьте себе обычный куб. Как геометрический объект он состоит из некоторых элементов, своего рода "кирпичиков", из которых он строится.
Эти базовые элементы, составляющие куб называются вершинами, ребрами и гранями. С этими понятиями вы будете сталкиваться на английском языке, ввиду того, что Grasshopper, в отличии от Rhino не переведён на русский. И так, вершина куба это Vertex (V), ребро это Edge (E), грань это Face(F).
В любом кубе содержится 8 вершин (V), 12 рёбер (E) и 6 граней (F). Вершины (V) представляют собой точки, рёбра (E) — линии, грани (F) — плоские поверхности.

Как было сказано, в кубе содержится 8 точек, составляющих вершины. Эти точки нужно каким-то образом хранить в строгом порядке, структурировать и представлять. В Grasshopper для хранения и структуризации данных используется список. Точки, как определённый тип данных хранятся в списке в определённом порядке. Список точек куба (1 на изображении) в Grasshopper выглядит так:
Структуру можно визуализировать при помощи нода Param Viewer (2 на изображении выше). В некоторых случаях это единственный нод, при помощи которого можно понять структуру дерева данных, однако основным способом визуализировать элементы, их типы данных, хранящиеся в виде списка, является панель (Panel, 1 на изображении выше).

Все элементы должны иметь порядок, иначе говоря свою очерёдность в списке. Эта очерёдность строго определена. Например точки в кубе имеют свою нумерацию, которая называется индексацией (индекс).

Почему важна правильная последовательность в списке? Давайте рассмотрим пример ниже. Для упрощения давайте рассмотрим нижнюю грань (Face) нашего куба. Нижняя грань так же содержит в себе точки (Vertex), рёбра (Edge), грань (Face). В правильном порядке точки показаны на изображении ниже:
Структура хранения точек, визуализированная при помощи панели (Panel) выглядит так:
На изображении выше в панели (Panel) можно увидеть индексы точек (1 на изображении) и запись самих точек в панели (2 на изображении). Точки представляются в виде трёх координат по X,Y и Z.

И так, порядок точек может быть и таким:
Но насколько верной будет подобный порядок точек? К чему это может привести? К тому, что геометрия будет иметь следующий вид:
Получившаяся фигура совсем не похожа на куб. Просто поменяв порядок точек в списке ( их индексацию) мы поменяли внешний вид фигуры.

Дело в том, что порядок имеет значение, а именно последовательность расположения точек в списке. В Rhinoceros ребра квадрата замыкаются последовательно, через каждую точку, начиная от точки с индексом 0, затем с индексом 1, заканчивая последней точкой с самым большим индексом. На предыдущем примере с нарушенной индексацией точек последовательность соединения точек линиями выглядит так:
В кубе порядок соединения точек линиями должен быть таким:
Если посмотреть на список, то последовательность точек выглядит следующим образом:
В начале между точкой с индексом 0 и точкой с индексом 1 образуется линия, затем между точкой с индексом 1 и с индексом 2 и так далее. В конце между точкой с индексом 3 и точкой с индексом 1 строится последняя линия для того, чтобы замкнуть контур.
Как мы говорили ранее в кубе 8 вершин и все точки в списке находятся строго на своем собственном месте и иначе быть не может.
Выводы по первому шагу.
Вся геометрия в Grasshopper хранится, обрабатывается и структурируется в виде списка. Так как список по существу является частью дерева данных (один список это дерево с одной веткой), то смело можно перефразировать утверждение выше: вся геометрия в Grasshopper обрабатывается и структурируется в виде дерева данных. Структура может быть визуализирована при помощи панели (Panel) в Grasshopper. Порядок элементов в списке важен, за этим нужно внимательно следить.

Небольшое дополнение.
Смысл индекса в списке прост. Идея заключается в том, что любому объекту должно соответствовать некое число, которое называется ключом (key). В итоге мы получаем некую пару: значение (Value) и ключ (Key). Так как ПК понимает только цифры, то мы можем обратиться к объекту по его ключу. Обратите внимание, что ключ это всегда некоторая цифра.