- •1.Двумерные алгоритмы. Преобразование координат: сдвиг, поворот.
- •2.Двумерные алгоритмы. Окна и Области вывода. Отсечение линий (общее представление, простой алгоритм). Автоматический подбор размеров и позиций.
- •3.Двумерные алгоритмы Понятие о рекурсии. Понятие о фракталах. Сглаживание кривых.
- •4.Векторы. Скалярное и векторное произведения векторов.
- •5.Однородные координаты.
- •6.Перенос и повороты в трехмерном пространстве.
- •7.Видовое преобразование
- •8.Перспективное преобразование
- •9.Алгоритм определения невидимых линий.
- •10.Удаление невидимых линий и поверхностей. Алгоритмы плавающего горизонта и Робертса.
- •11.Алгоритм Варнока.
- •12.Алгоритмы построения криволинейных поверхностей.
- •13. Типы графических устройств: графические дисплеи на запоминающей трубке, векторные графические дисплеи с регенерацией изображения, растровые графические дисплеи с регенерацией изображения.
- •14. Устройство электронно-лучевой трубки, устройство цветной растровой элт.
- •16.Алгоритм брезенхема для генерации окружности
- •17.Заполнение многоугольников
- •19. Построение реалистических изображений. Простая модель освещенности. Определение нормали к поверхности. Определение вектора отражения.
- •20. Построение реалистических изображений. Закраска методами Гуро и Фонга.
- •22.Тени.
6.Перенос и повороты в трехмерном пространстве.
Если каждая точка P(x, y, z) отображается на точку P’ (x’, y’, z’) в соответствии с уравнениями
где а1, а2, а3 – константы, то этот процесс называется переносом в трехмерном пространстве. Такой перенос может быть записан в матричной форме
[x’ y’ z’ 1] = [x y z 1] T
T=
Поворот вокруг координатных осей может быть описан матрицей без использования однородных координат. Будем использовать правую координатную систему, считая вращение вокруг оси положительным, если оно соответствует положительному направлению этой оси по правилу винта с правой резьбой, как это показано на рисунке.
Рассмотрим поворот вокруг оси z на угол α и для сокращения обозначим cos α = c и sin α =s. Тогда можно записать
[x’y’ z’]=[x y z] Rz
Rz =
Матрицу Rz можно использовать для получения матриц Rx и Ry, определяющих поворот вокруг соответствующих осей, чисто формальным образом, то есть без применения картинки. Это делается путем циклических перестановок, получаемых заменой каждой из букв x, y, z на последующую, считая, что за буквой z следует буква х.
Матрица Rz превращается в матрицу Rx циклическим переносом каждой строки на одну позицию и затем выполнением аналогичной операции для столбцов:
Так же матрица Rx преобразуется в «последующую» матрицу Ry
Суммируя сказанное, получим следующие матрицы
Rx=
Ry=
Rz =
Для поворота точки вокруг оси х на угол α матрица Rx используется следующим образом:
[x’ y’ z’] = [x y z] Rx
Матрицы Ry и Rz применяются аналогично.
Как известно, уравнения для преобразований могут интерпретироваться как изменения координат. Перенос точки на определенное расстояние вправо описывает теми же уравнениями перенос системы координат на такое же расстояние влево. На практике удобнее перемещать координатную систему вместо точки, но для этого требуется инвертирование матрицы. Запишем для наших матриц соответствующие им инвертированные матрицы.
Т-1 =
Rx-1=
Ry-1=
Rz-1 =
Теперь можно найти матрицу R для поворота вокруг любой прямой линии, проходящей через точку начала координат О. Для определенности будем полагать, что поворот осуществляется вокруг вектора v, начало которого расположено в точке О. Тогда положительное направление вращения соответствует направлению вектора по правилу винта с правой резьбой. Как и ранее поворот будем осуществлять на угол α.
Если концевая точка вектора v задана в ортогональных координатах, то сначала вычислим его сферические координаты .
Если = 0, то будем считать, что . В противном случае
Возможно, Вы помните обратное вычисление
Теперь стратегия заключается в таком изменении системы координат, чтобы вектор v (ось вращения) совпадал с новым направлением положительной полуоси z..
[x’ y’ z’] = [x y z] Rz-1
Rz-1 =
Ось x’ определяет положительное направление вектора (v1, v2, 0).
Теперь повернем оси x’ и z’ вокруг оси y’ на угол до совпадения оси z’ с вектором v.
Перепишем это условие как
[x’’ y’’ z’’]=[x’ y’ z’] Ry-1
Ry-1=
Фактический поворот вокруг вектора v на угол α теперь можно выполнить как поворот вокруг осиz’’ .То есть
[x’’’ y’’’ z’’’] =[x’’ y’’ z’’] Rv
Rv =
К этому моменту достигнуто выполнение соотношения
[x’’’ y’’’ z’’’] =[x y z] Rz-1 Ry-1 Rv
Координаты [x’’’ y’’’ z’’’] относятся к самой последней системе координат, тогда как их необходимо выразить в исходной системе. Обозначим эти координаты в исходной системе черезx*, y*, z*. Переход к исходной системе инвертированных матриц Rz-1 и Ry-1 ,(которые будут совпадать с матрицами Rz и Ry) в обратном порядке для преобразования точки x’’’, y’’’, z’’’:
[x* y* z*] =[x’’’ y’’’ z’’’] Ry Rz
Это означает, что полный поворот вокруг вектора v на угол α вычисляется по формуле
[x* y* z*] =[x’’’ y’’’ z’’’] Rz-1 Ry-1 Rv Ry Rz
где
Rz-1 =
Ry-1 =
Rv =
Ry=
Rz =
Для последующего применения запишем
Rz-1 Ry-1 Rv Ry Rz =R =
До сих пор мы говорили о повороте относительно вектора, привязанного к точке начала координат – точке О. Теперь поставим задачу определения поворота относительно вектора, начало которого расположено в любой произвольной точке А (а1, а2, а3). Для этого будем использовать вектор v для вычисления матрицы R таким же образом, как и ранее. Затем нужно выполнить три следующих шага.
1. Выполним перенос из заданной точки в точку начала координат О, используя однородные координаты и следующую матрицу:
Т-1=
2. Осуществим поворот относительно оси, проходящей через точку О, как и ранее, но матрицу R обходимо тривиальным образом расширить, чтобы можно было использовать однородные координаты
R* =
3. Применим преобразование, обратное шагу 1, используя матрицу
T=
После этого матрица обобщенного поворота вычисляется как
RGEN = T-1 R* T
И ее можно использовать следующим образом
[x* y* z* 1] = [x y z 1] RG