Практическое упражнение 14.12.2. Найдите внутренние множества Предположим, что для заданного луча объекты С и D имеют следующие г-списки: С_список: 1.7 2.2 2.9 4.7 5.55

1>_список: 1.2 1.5 2.1 2.5 3.1 3.8 4.7 8.3

Найдите ^-список для каждой из четырех возможных Булевых комбинаций объектов С и D.

14.12.2. Структура данных для Булевых объектов Натуралисты знают: мир так плох, Что блохи малые терзают сами блох, А этих блохи меньшие грызут… И нескончаем вечный этот зуд.

Джонатан Свифт (Jonathan Swift). «Из поэзии. Рапсодия*

Как следует представлять в программе составные объекты вида ((Лп2?)-С)-£> ? Поскольку составной объект всегда является комбинацией двух других объектов (возможно, тоже составных), например, Ob^op Obj2, то естественным описанием будет структура двоичного дерева. На рис. 14.60 приведено дерево, соответствующее объекту ^((Л, u52)uC2)u((5,-52)-Лз))-С,. Каждый внутренний узел

14.12. Составные объекты: логические операции с объектами

(кружок) представляет оператор, а каждый лист (квадратик)' - элементарную форму. Дерево строится путем комбинирования поддеревьев, которые, в свою очередь, являются элементарными объектами или поддеревьями («И нескончаем вечный этот зуд»). Когда узел содержит оператор разности, то он понимается как «левое поддерево минус правое поддерево», а не наоборот.

Составной объект и его С5С-дерево

Рис. 14.60. Составной объект и его С5С-дерево Выражение для составного объекта может быть до некоторой степени перегруппировано без изменения окончательной формы представляемого им объекта. Каждая перегруппировка приводит к отличающемуся дереву (см. упражнения в конце раздела). Таким образом, для заданного составного объекта дерево не является единственным.

На данный момент все уже рассмотренные нами типы объектов, такие как Sphere и Cube, порождены от класса Shape, который, в свою очередь, порожден от базового класса GeomObj. (Иерархия наследования приводится в приложении В.) Естественно породить от класса GeomObj еще один новый класс Boolean так, чтобы список объектов, являющийся списком класса GeomObj, мог «содержать в себе» объект типа Boolean. В свою очередь, в объекте Boolean должно храниться двоичное дерево, поэтому мы включаем в Boolеап указатели left и right на его дочерние поддеревья. Эти указатели должны указывать на объекты GeomObj, поскольку в одних случаях они указывают на геометрические формы, а в других - на деревья Bool еап. Таким образом, первая часть класса Bool еап выглядит так"opengl1_1018.html">⇐ Предыдущая| |Следующая ⇒