Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

0085730_32E51_mosin_v_g_matematicheskie_osnovy

.pdf
Скачиваний:
31
Добавлен:
12.03.2016
Размер:
1.22 Mб
Скачать

Глава 1

Математика графических преобразований

Любой процессор, даже самый продвинутый, умеет делать только две вещи: складывать и умножать числа — и больше ничего.

Мы так привыкли к неограниченным возможностям современных компьютеров, что уже вряд ли помним, что любое наше действие в пользовательской среде — неважно, какой именно: это может быть и мощный графический редактор, например, PhotoShop , и просто графический интерфейс операционной среды Windows — сводится, в конечном счете, к арифметическим действиям с числами. Например, симметричное отражение изображения (см. рис. 1.1, стр. 12) или искривление текста (см. рис. 1.2, стр. 13).

В этой книге мы рассмотрим лишь некторые математические идеи, позволяющие реализовать в численной форме некоторые графические операции: линейные преобразования объектов и формирование кривых по заданным характеристикам. Комбинирование этих приемов приводит к очень широкому классу действий с графическими объектами. Однако следует иметь в виду, что в целом компьютерная графика апеллирует к математике в гораздо более высокой степени, нежели это делаем мы в пределах нашего курса: активно используются приемы фрактальной геометрии, методов вычислений и многое другое.

Многие из этих приемов описаны в детальной монографии Эдварда Энджела [E], к которой мы отошлем заинтересованных читателей.

1.1Линейные задачи

Линейными мы будем считать преобразования объекта, которые не приводят к его деформации1, такие, как поворот, смещение или отражение.

Рассмотрим, например, симметричное отражение какого-нибудь изображения (см. рис. 1.1, стр. 12). Изображение, которое мы используем для приме-

1Разумеется, это не строгая формулировка — мы не определили термин “деформация”. Корректное определение линейного преобразования будет дано в главе, посвященной линейной алгебре (см. главу 2, стр. 17).

11

12

Глава 1. Математика графических преобразований

ра, является растровым (формат JPG), то есть — описывается попиксельно. Каждый пиксел (точка изображения) обладает своими числовыми характеристиками: цветом, яркостью, глубиной и, в числе прочего, координатами. В результате отражения изменяются координаты точки, то есть, процессор вычисляет новые координаты для каждого пиксела при помощи стандартного алгоритма2.

(a) Исходное изображение.

(b) Отраженное изображение.

Рис. 1.1: Простейшая манипуляция с объектом: симметричное отражение.

Алгоритм состоит в выполнении матричного умножения, которое сводится к арифметическим операциям умножения и сложения чисел (см. раздел 2.1, стр. 18). Если предположить, что вертикальная ось системы координат на плоскости монитора совпадает с левой границей рисунка, то процессор вычисляет новые координаты (x , y , 1) каждого пиксела в проективной форме по следующей формуле:

y =

0

1

0

y

 

,

x

 

1

0

0

x

 

 

1

0

0

1 · 1

 

где (x, y, 1) — это старые проективные координаты пиксела3. Аналогично, при помощи матричного умножения, можно получить алгоритм вертикального отражения и, вообще — отражения относительно любой прямой на плоскости.

Другие матрицы определяют другие преобразования плоскости: смещения, масштабирования, повороты и их комбинации. Решениям таких задач посвящена первая часть книги.

1.2Нелинейные задачи

Если объект имеет сложную криволинейную форму, то его точное4 описание получается путем интерполяции его границы в той или иной форме

2Несмотря на то, что количество пикселов в достаточно крупном растровом изображении измеряется миллионами, PhotoShop выполняет эту операцию в доли секунды. Все дело, разумеется, в быстродействии процессора. Те читатели, которые застали эпоху процессоров до серии Pentium, помнят, что на прцессорах серии 486 работать в растровых редакторах было практически невозможно.

3О проективных координатах точек и векторов мы также расскажем в дальнейшем (см. раздел 3.1, стр. 64).

4То есть, исключающее аппроксимацию в виде мнгогзвеньевой ломаной.

1.2. Нелинейные задачи

13

(см. главу 6, стр. 139). Так, например, описываются кривые, формирующие символы любого шрифта.

(a) Исходный текст.

(b) Текст, направленный вдоль кривой.

Рис. 1.2: Использование криволинейных траекторий при работе с текстом.

Кроме того, кривые могут иметь самостоятельное значение, например, если речь идет о криволинейной траектории движения объекта, или выполнять вспомогательные функции, как, например, в случае с искривлением текста (см. рис. 1.2, стр. 13). Рассмотрим более подробно этот пример.

Направляющие искривления были сформированы в векторном редакторе при помощи инструмента “трехточечная кривая”. Для их построения процессор использовал алгоритм точной интерполяции (см. раздел 6.1, стр. 139). Имея в своем распоряжении координаты трех точек A(xA, yA), B(xB , yB ) и C(xC , yC ), через которые проходит кривая, он вычислил коэффициенты aij параметически заданной функции5

a10 + a11u + a12u2

 

p(u) = a20 + a21u + a22u2

путем следующих действий, состоящих опять-таки в выполнении матричного умножения:

a11

=

3

4

1

xB

,

a10

 

1

0

0

xA

 

a12

2

4

2 xC

 

a21

=

3

4

1

yB .

a20

 

1

0

0

yA

 

a22

2

4

2 yC

 

После этого, путем пересчета значений функции с минимальным шагом получил координаты всех точек кривой6.

Решению подобных задач посвящена вторая часть книги.

5О функциях, заданных параметрически, мы расскажем во второй части книги (см. раздел 4.1, стр. 87).

6Всех с машинной точки зрения, а не с общетеоретической. Вообще точек на любом участке любой кривой бесконечно много, но на экране монитора присутствует конечное их число.

14

Глава 1. Математика графических преобразований

Часть I

Преобразования плоскости

15

Глава 2

Линейная алгебра

Основными объектами линейной алгебры1 служат векторные пространства и их линейные преобразования. В этой главе мы построим математический аппарат, который позволит представлять точки простанств в виде векторовстолбцов их координат (см. раздел 2.2, стр. 27) и осуществлять линейное действие на пространство путем матричного умножения (см. раздел 2.3, теор. 21, стр. 56).

Мы начинаем с изучения матричных действий (см. раздел 2.1, стр. 18), уделяя основное внимание матричному умножению и матричному обращению. Это позволяет нам в дальнейшем при изучении линейных операторов (см. раздел 2.3, стр. 44) установить взаимно-однозначное соответствие (или, выражаясь математически — алгебраический изоморфизм) между двумя множествами: множеством матриц, с одной стороны, и множеством линейных операторов, действующих в векторном пространстве, с другой (см. раздел 2.3, теор. 25, стр. 58).

Через всю главу мы проводим как генеральную линию серию геометрических примеров, особенно важных для дальнейших целей — построения алгоритмов преобразований плоскости. К этим примерам относятся геометрические примеры векторных пространств (см. раздел 2.2, стр. 27) и примеры линейных операторов, действующих на плоскости: геометрически (см. раздел 2.3.1, стр. 44) и в виде матриц (см. раздел 2.3.5, стр. 59).

Работая с этой главой, необходимо параллельно обращаться к приложениям, посвященным определителям2, матрицам и линейным системам (см.

1Прежде всего, договоримся о терминах. Слово “алгебра” используется как минимум в двух разных смыслах. Обычно под этим термином понимают раздел математики (например, в заголовке этой главы слово “алгебра” означает именно это). Но, кроме этого значения, у него есть еще одно — сугубо математическое: термином “алгебра” в математике обозначают множества, обладающие определенными свойствами (см. опр. 6, стр. 21), и в заголовке раздела 2.1 слово “алгебра” присутствует именно в смысле множества. Бояться такой амбивалентности не следует. Вообще — это обычная ситуация в математике, когда значение слова существенно зависит от контекста — слов мало, а математических понятий очень много. Приходится довольствоваться малым и использовать то, что есть.

2Причем, изучение определителей (см. приложение A.1, стр. 157) должно даже предшествовать чтению. К сожалению, рамки курса невелики, и в них невозможно подробно осветить все темы. Некоторые из них не включены в теоретический блок, а представлены только в приложениях.

17

18

Глава 2. Линейная алгебра

приложение A, стр. 157), а также векторным пространствам (см. приложение B, стр. 187). В этих приложениях подробно рассмотрено множество примеров, где применяются самые разнообразные алгебраические методы, полезные как на практике, так и при решении теоретических задач.

Разумеется, одна небольшая глава книги не может рассматриваться как подробное руководство по линейной алгебре. Мы затрагиваем лишь ее небольшую часть, необходимую для специфических приложений компьютерной графики. Подробные курсы линейной алгебры можно найти в классических книгах Б. Л. Ван-дер-Вардена [V], А. И. Мальцева [M], А. И. Кострикина и Ю. И. Манина [KM] и др.

2.1Полная матричная алгебра

Вдальнейшем мы увидим (см. раздел 2.3.5, стр 59), что очень широкий спектр преобразований плоскости реализуется в виде квадратных матриц, причем композициям таких преобразований отвечает математическая комбнинация соответствующих матриц.

Вэтом разделе мы рассмотрим матричные действия: сложение, скалярное кратное, умножение (см. раздел 2.1.1, стр 18) и матричное обращение (см. раздел 2.1.3, стр. 24) и установим их свойства (см. раздел 2.1.2, стр. 21).

Практические примеры, относящиеся к этому разделу, представлены в приложениях (см. приложение A, стр. 157).

2.1.1Матрицы

Определение 1 (матрицы) Матрицей называется прямоугольная таблица чисел

 

a21

a22

. . .

a2n

 

 

 

a11

a12

. . .

a1n

 

 

A =

.. ..

. . . ..

 

. .

 

.

 

.

 

a

a

m2

. . .

a

 

 

m1

 

 

mn

 

 

 

 

 

 

 

 

 

 

Элементы, расположенные в этой таблице, называются матричными компонентами. Они нумеруются двумя индексами: aij , причем первый индекс указывает на номер строки, а второй — на номер столбца, в котором расположено соответствующее число. Множество матриц, состоящих из m строк и n столбцов, мы будем обозначать Matr m×n.

Если число строк в матрице совпадает с числом ее столбцов, то матрица называется квадратной. Множество всех квадратных матриц порядка n обозначается Matr n.

Пример 1 Рассмотрим несколько примеров. Вот — примеры прямоугольных матриц:

 

4

3

 

 

Matr 3×2 ,

5

3

1

 

Matr 2×3 .

 

2

1

 

 

 

 

1

 

 

 

 

2

0

 

 

 

 

 

 

 

 

 

1

2

 

 

 

 

 

 

 

 

 

 

 

2.1. Полная матричная алгебра

19

А это – квадратные матрицы (отметим, что в дальнейшем именно квадратные матрицы будут играть существенную роль):

3

2

 

Matr 2

 

6

3

 

1

 

 

Matr 3 .

 

 

 

 

 

2

1

 

2

 

 

 

 

 

5

8

 

3

 

 

0

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Среди всего множества квадратных матриц выделяются так называемые единичная и нулевая матрицы. Их свойства относительно матричных действий аналогичны свойствам единицы и нуля на множестве чисел.

Определение 2 (единичная и нулевая матрицы) Единичной называется квадратная матрица, на главной диагонали которой расположены единицы, а на остальных местах — нули. Нулевой называется квадратная матрица, все компоненты которой равны нулю.

Пример 2 Вот примеры единичных матриц порядка 2 и порядка 3:

0

1

 

Matr 2×2 ,

 

0

1

0

 

 

Matr 3×3 .

 

 

 

 

 

1

0

0

 

 

 

 

 

0

0

1

 

 

1

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

А это — примеры соответствующих нулевых матриц:

0

0

 

Matr 2×2 ,

 

0

0

0

 

 

Matr 3×3 .

 

 

 

 

 

0

0

0

 

 

 

 

 

0

0

0

 

 

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

С матрицами можно выполнять различные действия: сложение, умножение и умножение на число (так называемое, скалярное кратное матрицы). Эти действия мы рассмотрим в настоящем разделе3.

Определение 3 (сумма матриц) Пусть имеются две матрицы A и B одного порядка: A, B Matr m×n. Их суммой называется прямоугольная матрица C Matr m×n того же порядка, что и слагаемые, компоненты которой вычисляются следующим образом:

cij = aij + bij .

Другими словами — сложение матриц осуществляется покомпонентно.

Пример 3 Пусть требуется сложить две матрицы порядка 2 × 3:

1

1

0

+

0

1

1

=

1

2

1 .

1

1

3

 

2

1

3

 

3

0

6

Результат на первом-первом месте получился очень просто: 1 + 2 = 3. На остальных местах — точно так же.

Определение 4 (скалярное кратное матрицы) Пусть имеется матрица A Matr m×n и число α. Тогда выражение αA означает матрицу B Matr m×n того же порядка, что и матрица A, компоненты которой вычисляются следующим образом:

bij = αaij .

Другими словами — скалярное кратное матрицы вычисляется покомпонентно.

3Еще одной матричной операции — матричному обращению — посвящен отдельный раздел.

20

 

 

 

 

 

 

Глава 2. Линейная алгебра

Пример 4 Умножим матрицу на число:

 

2

6 .

2

2

1

3

=

4

 

1

1

0

 

2

2

0

Каждое место матрицы мы просто умножили на 2. Других комментариев к этому действию не требуется.

Что же касается еще одной матричной операции — матричного умножения — здесь ситуация сложнее. Во-первых, далеко не каждую пару матриц можно перемножить. Кроме того, сама операция умножения требует подчас весьма громоздких вычислений.

Определение 5 (произведение матриц) Пусть имеется матрица A

Matr m×p и матрица B Matr p×n. Тогда их произведением AB (именно в этом порядке, а не наоборот) называется матрица C Matr m×n, компоненты которой вычисляются по следующим формулам:

cij = ai1b1j + ai2b2j + · · · + aipbpj .

Другими словами — для того, чтобы вычислить компоненту произведения, находящуюся на месте с номером ij, нужно i-ю сторку первого множителя умножить на j-й столбец второго множителя.

Пример 5 Перемножим две матрицы: первая имеет порядок 2×3, вторая — 3×2. Согласно определению, результирующая матрица должна иметь порядок 2 × 2.

3

1

1

1

 

0

=

6

2 .

 

1

 

1

 

1

 

 

 

2

 

1

 

1

2

 

 

 

 

4

1

 

 

 

 

 

 

Первое-первое место в произведении получается умножением первой строки первого множителя на первый столбец второго множителя:

1 · 1 + (1) · 1 + 2 · 2 = 1 1 + 4 = 4 .

На первом-втором месте мы умножаем первую строку первого множителя на второй столбец второго множителя:

1 · 1 + (1) · 0 + 2 · (1) = 1 2 = 1 .

Второе-первое место получается умножением второй строки первого множителя на первый столбец второго множителя:

3 · 1 + 1 · 1 + 1 · 2 = 3 + 1 + 2 = 6 .

Наконец, второе-второе место — это произведение второй строки первого множителя и второго столбца второго множителя:

3 · 1 + 1 · 0 + 1 · (1) = 3 1 = 2 .

Как видите, матричное умножение — весьма специфичная операция. Оно зависит от порядка следования множителей, легко можно привести примеры, когда умножение двух матриц невозможно, и, более того: есть ситуации, когда произведение матриц в одном порядке возможно, а в обратном — нет.