1.Начало
В прошлой статье про фракталы,в частности треугольник серпинского,мы затронули афинные преобразования.Давайте разберемся,что же это такое.
Афинные преобразования, также известные линейные преобразования, являются важным понятием в математике и компьютерной графике. Они представляют собой способ описания того, как геометрические фигуры могут быть преобразованы путем изменения их положения, размера и ориентации.
Афинные преобразование - это преобразование вида:
где a, b, c, d, e и f - константы, определяющие преобразование. Эти константы можно использовать для описания различных преобразований, включая перевод, вращение, масштабирование и сдвиг.
Стоит отметить, что константы a, b, d, e должны составлять невырожденную матрицу.Невырожденной называется матрица, имеющая ненулевой определитель.Что такое матрицы и их определитель разберем в следующей статье.
Эти размышления можно записать в более формальном виде: Афинные преобразования f: R^n ---> R^n преобразования вида f=X*x+v, где X - невырожденная матрица составленная из тех самых коэффициентах при переменных, а v какая то константа из пространства R^n. Пространство R^n,обозначение пространство размерности n,в данной статье будем рассматривать пространства R^2 и R^3, то есть в интуитивном понимание 2D и 3D.
Размышления о важности афинных преобразований в первом приближении могут навести на мысль что они важны, поскольку они позволяют представить геометрические фигуры в математической форме, которой легко манипулировать и анализировать. Применяя афинные преобразования к фигуре, мы можем изменить ее положение, размер и ориентацию без изменения ее основных свойств.
2.Простые примеры афинных преобразований.
- Поворот
- Масштабирование (сжатие/растяжение, отражение)
- Сдвиг,перенос
1.Чтобы произвести афинные преобразования,нужно подобрать какие то коэффициенты,приходят ли Вам в голову какие-нибудь идеи? Позвольте мы внесем свои предположения
Допустим а = сos(t), b = sin(t), d = -sin(t), e = cos(t),матрица X выглядит так:
Новые координаты будут выглядеть так:
Пока все рассуждения выглядят довольно абстрактно,давайте рассмотрим на каком нибудь конкретном примере.Зафиксируем систему координат в ортонормированном базисе(Стандартная ось x0y,с помощью которой мы чертим графике в школе),и зафиксируем произвольную точку А,тогда получим:
2.Масштабирование
dВ этот раз начнем с конкретного геометрического представления, пусть точка A имеет координаты (1,1) (A=(1,1)),а точка B имеет координаты (2,1) (B=(2,1)),тогда одно из элементарных афинных преобразований будет выглядеть так:
Давайте разбираться что произошло,мы рассматриваем операцию масштабирования относительно координатных осей с коэффициентами k1 k2,смотря на наш пример k1=k2=2.
Афинные преобразования в данном случае выглядят так:
Данные преобразования снова можно выразить в виде матричного умножения,тогда матриц X называется матрицей масштабирования ее структуру получаем из уравнений:
Теперь приведем пример отражения на этот раз пусть зафиксированы три произвольные точки на плоскости A,B,C,тогда это преобразование будет выглядеть так:
Отражение описывается,наверное самым простым преобразованием,оно имеет вид:
Матрица X в данном случае называется матрицей отражения и имеет вид:
3.Сдвиг,Перенос.
На этот раз отойдем от точек и рассмотрим систему координат,для нее тоже можно применять афинные преобразования,данный пример показывает как можно применить сдвиг для системы координат xOy.
Зафиксируем систему координат xOy и пусть с=dx, а f=dy,тогда мы сдвигаем систему координат в точку (dx,dy),посмотрим визуализацию:
В переносе дела обстоят немного сложение,рассмотрим оператор переноса на вектор трансляции t = (tx,ty),при этой операции любой объект перемещается без искажения, и любая сторона остается параллельной самой себе.Для понимания рассмотрим пример:Пусть зафиксирована система координат, и точки A, B, и вектор трансляции t,тогда преобразование будет выглядеть так:
Преобразования для переноса довольно очевидны:
Здесь X– должна быть матрицей трансляции . Однако невозможно построить матрицу X размерностью 2x2, чтобы одновременно удовлетворялись оба уравнения системы.
И все же, такую матрицу можно создать, если формально рассматривать аффинные 2D-преобразования в 3-х мерном пространстве. Для этого надо перейти к однородным координатам,но оставим эту тему для самостоятельного изучения любознательным читателям.
3.Два взгляда на афинные преобразования.
Формулы линейного преобразования,можно рассматривать двумя способами,во-первых, в статичной системе координат точки двигаются по какому-то определенному закону движения,во-вторых, наоборот точки статичны, а систему координат поворачиваем систему координат в обратную сторону.
Рассмотрим первую способ представления,пусть у нас есть статичная система координат и произвольный треугольник закрепленный в плоскости и мы будем поворачивать треугольник на 45 градусов,то есть в этом случае мы задаем такой закон движения: используя элементарное афинное преобразование поворот каждую точку поворачиваем на 45 градусов, посмотрим на реализацию:
Теперь рассмотрим другу интерпретацию аффинными преобразованиями,пусть теперь треугольник ABC является неподвижным относительно системы координат (x,y), и введем новую систему координат (x',y'). Эту систему координат получим из старой системы координат, повернув ее на угол в 45 градусов против часовой стрелки вокруг начала координат.
4.Афинные преобразования в пространстве.
Давайте немного отвлечемся от плоскости и перейдем к более интересному объекту-трехмерное пространство.
Введем систему координат, которую мы будем в дальнейшем использовать.
- Тройка вектор правая.
- Ось z перпендикулярна плоскости, образованной векторами x,y
- Ось y перпендикулярна плоскости, образованной векторами y,z
- Ось x перпендикулярна плоскости, образованной векторами x,z
Не умаляя общности скажем, что последние 3 условия можно можно заменить на утверждение о том что каждый из векторов должен быть перпендикулярен каждому по отдельности,то есть каждый вектор должен быть продуктом векторного произведения пары векторов,но об этой темы поговорим в следующий раз.
Итак,теперь у нас есть некое пространство,можем ли мы делать те же преобразования,что и на плоскости? Конечно! Начнем с параллельного переноса.
Параллельный перенос.
На рисунке слева мы видим исходный объект,справа же преобразованный параллельным переносом куб.Матрица такого преобразования выглядит так:
Поворот/Вращение
Если на плоскости мы делали поворот относительно какой-то точки,то в пространстве повороты производятся относительно некоторого вектора.Примечание:Поворот относительно некоторого вектора совсем не означает что можно проводить поворот относительно какой-то прямой,прежде чем разбираться с преобразованиями и строить матрицу перехода,давай рассмотрим частные случаи поворота относительно координатных осей.
Поворот относительно оси у,заметим,что при повороте ординаты точек не меняются,также стоит отметить,что координаты x и z меняются независимо от y. Это означает, что любая точка p(x, y, z) перейдет в точку p’(x’(x, z), y, z’(x, y)). Теперь осталось понять, как преобразуются координаты x и z: в плоскости Oxz это будет поворот вокруг начала координат по часовой стрелке (т.к. x z y - левая тройка), т.е. в отрицательном направлении. Матрица такого преобразования известна(см.глава 2):
Итак имеем новую систему координат:
Тогда матрица преобразования:
Поворот вокруг осей x и z получается аналогичными рассуждениями,предлагаем читателю,провести эти рассуждения для лучшего закрепления материала,мы лишь предоставим визуализацию данного преобразования:
Масштабирование (сжатие/растяжение, отражение).
Коэффициенты сжатия/растяжения, по аналогии с двухмерным пространством, определяются диагональными членами матрицы:
Результат:
Комбинация коэффициентов kx = -1, ky = 1, kz = 1 будет задавать отражение от плоскости Oyz (x = 0). При kx = ky = kz = -1 получим центральную симметрию относительно начала координат.
5.Сложные или композиция афинных преобразований.
Сложные аффинные преобразования можно получить как комбинацию простых (элементарных) преобразований. При этом выбирать простые аффинные преобразования можно по разному. Например, поворот можно представить как комбинацию масштабирования и сдвига. Тем не менее, для удобства, поворот также считается элементарным преобразованием. Поворот вокруг произвольного вектора представляется как комбинация поворотов вокруг координатных осей.
6.Связь фракталов и афинных преобразований:
В прошлой статье мы в первом приближении взглянули на понятие фракталов,оказывается существует тесная связь между фракталами и афинными преобразованиями. На самом деле, афинные преобразования часто используются для генерации и анализа фракталов.
Одним из самых известных примеров использования афинских преобразований для генерации фракталов является папоротник Барнсли, названный в честь математика Майкла Барнсли, который представил его в своей книге "Фракталы повсюду". Папоротник Барнсли образуется путем применения набора из четырех афинских преобразований к начальной точке в декартовой плоскости. Каждое преобразование соответствует своему "правилу", и выбор правила происходит случайным образом на каждой итерации алгоритма. При многократном повторении этого процесса возникает фрактальный узор, похожий на папоротник.
Другим примером использования афинных преобразований для создания фракталов является треугольник Серпинского. Треугольник Серпинского образуется путем создания треугольника и многократного удаления меньших треугольников из его центра. Процесс удаления достигается путем применения набора из трех афинских преобразований, каждое из которых соответствует удалению одного из меньших треугольников. При многократном повторении этого процесса возникает фрактальный узор, напоминающий треугольник Серпинского.
Афинные преобразования также используются для анализа свойств фракталов. Например, при изучении множества Мандельброта афинные преобразования используются для отображения комплексной плоскости на себя, что позволяет исследователям более детально изучить фрактальные свойства этого множества.
7.Заключение.
Помимо применения в генерации и анализе фракталов, афинные преобразования имеют множество других практических применений в математике и компьютерной графике. В линейной алгебре афинные преобразования используются для решения систем линейных уравнений и анализа свойств матриц. В компьютерной графике афинные преобразования используются для трансформации объектов в двухмерном и трехмерном пространстве, что позволяет создавать анимацию и визуальные эффекты.
Одним из наиболее важных свойств афинных преобразований является сохранение параллельных прямых. Это означает, что если две прямые параллельны до преобразования, то они останутся параллельными и после преобразования. Это свойство очень важно во многих приложениях, таких как компьютерная графика и инженерное дело, где важно сохранять относительное положение объектов.
В целом, афинные преобразования являются мощным инструментом в математике и компьютерной графике. Они обеспечивают способ представления и манипулирования геометрическими фигурами в математической форме, с которой легко работать и анализировать. Понимая свойства и применение афинных преобразований, мы можем получить новое представление о работе естественного мира и создать новые и захватывающие визуальные эффекты.