Т(А ор В) = Т(А) ор Т(В), (14.51)
где ор - один из Булевых операторов и, п, -. Таким образом, нахождение внутренних множеств составных объектов эквивалентно выполнению логических операций над списками интервалов.
Гла. а .4. Введение в трассировку лучей Отметим, что, хотя нас в конечном счете интересует только первый элемент внутреннего множества - время первого соударения, в процессе построения списков нам необходимо сохранять полные списки, поскольку результирующее время первого соударения может располагаться глубоко внутри одного из промежуточных списков. К счастью, в нашем распоряжении уже имеется «артиллерия» для создания внутренних множеств внутри трассировщика лучей: в методе hit О для каждого типа формы в массиве inter, hit[] аккуратно сохраняются все случившиеся соударения луча с объектом, причем уже отсортированные по времени. До сих пор мы использовали из этого списка только время первого соударения. Однако поскольку мы начали трассировку лучей для Булевых объектов, нам понадобится весь список.
Пример 14.12.1. Формирование внутренних множеств Рассмотрим следующие два списка, представляющие собой внутренние множества: Л_список: 1.2 1.5 2.1 2.5 3.1 3.8 5_список: 0.6 1.1 1.8 2.6 3.4 4.0
Для построения четырех новых внутренних множеств применим приведенные выше правила (проверьте их правильность):
A\jB - 0.6,1.1,1.2,1.5,1.8,2.6,3.1,4.0;
АпВ = 2.1,2.5,3.4,3.8; А-В = \.2,1.5,3.1,3.4; В-А - 0.6,1.1,1.8,2.1,2.5,2.6,3.8,4.0.
Для формирования новых внутренних множеств нам потребуется функция combineListsO, которая принимает в качестве аргументов оператор и два г-списка и создает новый список t-значений в соответствии с одним из четырех Булевых операторов. Работу этой подпрограммы мы рассмотрим позднее.
Процесс трассировки лучей для составного объекта сводится к трассировке каждого из компонентов такого объекта, созданию для каждого из них внутренних множеств с последующей компоновкой этих множеств. Первое положительное время соударения из составного списка определяет точку первого соударения луча с составным объектом. Затем производится обычное закрашивание, включающее испускание вспомогательных лучей, если поверхность блестящая или прозрачная.