Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Математическая основа обратной трассировки лучей
Координаты всех объектов сцены определены в некой глобальной системе координат (в том числе и камеры). После формирования первичного луча создадим подсистему, у которой центр совпадает с точкой выхода луча и ось OZ направлена по лучу. Вычислим матрицу перехода из первой системы координат во вторую. Это позволит просто искать пересечения с треугольником, со сферой, векторы преломления и отражения. При необходимости переводим координаты нужных объектов в новую систему координат и работаем уже в ней. Если необходимо построить вторичный луч, создаем еще одну систему координат, связанную с вторичным лучом, и считаем матрицу для перехода из 2 системы в 3. Чтобы получить матрицу перехода из 1 в 3 необходимо умножить матрицу перехода из 2 в 3 умножить на матрицу перехода из 1 в 2. Таким образом, мы работаем все время в какой-то подсистеме. Нам не надо переводить никакие координаты обратно в глобальную систему. Поэтому не надо и составлять обратную матрицу. Составление матрицы Составление матрицы преобразования из текущей системы координат в систему координат, центр которой находится в точке (x, y, z) и ось OZ которой направлена по (dx, dy, dz). Для такого преобразования необходимо: совершить сдвиг в точку (x, y, z) совершить поворот вокруг OZ совершить поворот вокруг OX
1. Матрица сдвига: .
2. Необходимо совершить поворот вокруг оси OZ по часовой стрелке на угол α.
. Матрица поворота, таким образом, будет равна:
3. Необходимо совершить поворот вокруг оси OX по часовой стрелке на угол β.
.
Матрица поворота, таким образом, будет равна:
Умножив M3 на M2, а результат на M1 получим искомую матрицу перехода:
Программная реализация Во многих функциях и процедурах в программе в качестве входных и выходных параметров выступают матрицы. Поэтому в программе введен специальный тип:
TMatrix=Array [0..11] of real
Это массив из 12 элементов типа real. Он представляет собой последовательно записанные три верхние строчки матрицы. Я не включил последнюю строчку, так как она одинаковая у всех матриц преобразования и равна (0, 0, 0,1). Для операций над матрицами в программе предусмотрены следующие процедуры: 1. Procedure MatrixAB (var Res: TMatrix; const M1,M2: TMatrix)
Процедура умножает матрицу M1 на матрицу M2 и помещает результат в Res. 2. Procedure ShiftMatrix (var M: TMatrix; Z: real) Создает матрицу перехода из текущей системы координат в систему координат, сдвинутую по оси OZ на z. Процедура перемещает систему координат, задаваемую матрицей M, по оси OZ на z. 3. Procedure SetMatrix (var M: TMatrix; dx,dy,dz,x,y,z: real) overload Создает матрицу перехода из текущей системы координат в систему координат, находящуюся в точке (x,y,z), ось OZ которой направлена по вектору (dx,dy,dz). 4. Procedure SetMatrix (var M: TMatrix; dx,dy,dz: real) overload Создает матрицу перехода из текущей системы координат в систему координат, ось OZ которой направлена по вектору (dx,dy,dz). Преобразование координат Для преобразования координат точки из одной системы координат в другую необходимо умножить матрицу преобразования на столбец координат точки.
Для преобразования точки из одной системы координат в другую в программе существует процедура Trans (const M: TMatrix; var F: TPoint; const V: TPoint). В V содержатся координаты точки, координаты которой надо преобразовать. В F содержатся результат. M - матрица преобразования. В процедуру Ray передается только матрица перехода из глобальной системы координат в систему, связанную с лучом (Mi). Процедура находит координаты вторичного луча в новой системе координат. Составляет матрицу перехода из текущей системы в систему, связанную с лучом (Li+1). Умножает матрицы Mi+1=Li+1Mi Вызывает рекурсивно Ray с параметром Mi+1
|
|||||
Последнее изменение этой страницы: 2020-03-14; просмотров: 92; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.235.145.95 (0.006 с.) |