0085730_32E51_mosin_v_g_matematicheskie_osnovy
.pdf3.3. Пример алгоритма покадровой анимации |
81 |
Следовательно, декартовы координаты четвертой вершины D8 в восьмом кадре таковы: D8(−0.6, 1.4). Окончательно, координаты вершин квадрата в восьмом кадре:
A8(−1, 1.4) , B8(−1, 1.8) , C8(−0.6, 1.8) , D8(−0.6, 1.4) .
9-й кадр
Здесь сначала происходит смещение плоскости на вектор b = (−4, −4) для совмещения центра исходного квадрата с началом координат. Затем плоскость равномерно масштабируется с коэффициентом 0.1. После этого плоскость смещается на вектор b9:
b9 = −b + |
9 |
· a = (4, 4) + |
9 |
(−6, −3) = (−1.4, 1.3) . |
10 |
10 |
Следовательно, оператор η9, который действует в девятом кадре, обладает следующей матрицей:
η9 = Tb9 S0.1Tb = |
|
0 |
|
|
0 |
|
−4 |
|
|||||
= |
0 |
1 |
−1.3 |
0.1 |
0 |
1 |
= |
||||||
|
|
1 |
0 |
|
1.4 |
|
0.1 |
0 |
0 |
1 |
0 |
4 |
|
|
0 |
0 |
|
1 0 |
0 |
1 0 |
0 |
−1 |
|
||||
= |
0 |
0.1 |
−0.9 . |
|
|
|
|
|
|
||||
|
|
0.1 |
0 |
|
1.8 |
|
|
|
|
|
|
|
|
|
0 |
0 |
|
1 |
|
|
|
|
|
|
|||
При помощи матричного умножения вычислим координаты вершин квадрата в девятом кадре:
A9 |
= η9(A) = |
0 |
0.1 |
−0.9 |
3 |
= |
−1.2 . |
|
|
0.1 |
0 |
1.8 |
3 |
|
1.5 |
|
|
0 |
0 |
1 1 |
1 |
||
Следовательно, декартовы координаты первой вершины A9 в девятом кадре таковы: A9(−1.5, 1.2). Аналогично поступим со второй вершиной:
B9 |
= η9(B) = |
0 |
0.1 |
−0.9 |
5 |
= |
−1.4 . |
|
|
0.1 |
0 |
1.8 |
3 |
|
1.5 |
|
|
0 |
0 |
1 1 |
1 |
||
Следовательно, декартовы координаты второй вершины B9 в девятом кадре таковы: B9(−1.5, 1.4). Далее — аналогично поступим с третьей вершиной:
C9 |
= η9(C) = |
0 |
0.1 |
−0.9 |
5 |
= |
−1.4 . |
|
|
0.1 |
0 |
1.8 |
5 |
|
1.3 |
|
|
0 |
0 |
1 1 |
1 |
||
Следовательно, декартовы координаты третьей вершины C9 в девятом кадре таковы: C9(−1.3, 1.4). Далее — аналогично поступим с четвертой вершиной:
D9 |
= η9(D) = |
0 |
0.1 |
−0.9 |
3 |
= |
−1.2 . |
|
|
0.1 |
0 |
1.8 |
5 |
|
1.3 |
|
|
0 |
0 |
1 1 |
1 |
||
82 |
Глава 3. Проективные операторы |
Следовательно, декартовы координаты четвертой вершины D9 в девятом кадре таковы: D9(−1.3, 1.2). Окончательно, координаты вершин квадрата в девятом кадре:
A9(−1.5, 1.2) , B9(−1.5, 1.4) , C9(−1.3, 1.4) , D9(−1.3, 1.2) .
10-й кадр
Здесь сначала происходит смещение плоскости на вектор b = (−4, −4) для совмещения центра исходного квадрата с началом координат. Затем плоскость равномерно масштабируется с коэффициентом 0. После этого плоскость смещается на вектор b10:
10
b10 = −b + 10 · a = (4, 4) + (−6, −3) = (−2, 1) .
Следовательно, оператор η10, который действует в десятом кадре, обладает следующей матрицей:
η10 = Tb10 S0Tb =
= |
0 1 |
−1 |
0 0 |
0 |
0 |
1 |
−4 |
= |
|||
|
|
1 |
0 |
2 |
0 |
0 |
0 |
1 |
0 |
4 |
|
|
0 0 |
1 0 |
0 |
1 0 |
0 |
−1 |
|
||||
= |
|
0 |
0 |
−1 |
. |
|
|
|
|
|
|
|
|
0 |
0 |
2 |
|
|
|
|
|
|
|
|
0 |
0 |
1 |
|
|
|
|
|
|
||
При помощи матричного умножения вычислим координаты вершин квадрата в десятом кадре:
A10 |
= η10(A) = |
0 |
0 |
−1 |
3 |
= |
−1 . |
|
|
0 |
0 |
2 |
3 |
|
2 |
|
|
0 |
0 |
1 1 |
1 |
||
Следовательно, декартовы координаты первой вершины A10 в десятом кадре таковы: A10(−2, 1). Аналогично поступим со второй вершиной:
B10 |
= η10(B) = |
0 |
0 |
−1 |
5 |
= |
−1 . |
|
|
0 |
0 |
2 |
3 |
|
2 |
|
|
0 |
0 |
1 1 |
1 |
||
Следовательно, декартовы координаты второй вершины B10 в десятом кадре таковы: B9(−2, 1). Далее — аналогично поступим с третьей вершиной:
C10 |
= η10(C) = |
0 |
0 |
−1 |
5 |
= |
−1 . |
|
|
0 |
0 |
2 |
5 |
|
2 |
|
|
0 |
0 |
1 1 |
1 |
||
Следовательно, декартовы координаты третьей вершины C10 в десятом кадре таковы: C10(−2, 1). Далее — аналогично поступим с четвертой вершиной:
D10 |
= η10(D) = |
0 |
0 |
−1 |
3 |
= |
−1 . |
|
|
0 |
0 |
2 |
5 |
|
2 |
|
|
0 |
0 |
1 1 |
1 |
||
3.3. Пример алгоритма покадровой анимации |
83 |
Следовательно, декартовы координаты четвертой вершины D10 в десятом кадре таковы: D10(−2, 1). Окончательно, координаты вершин квадрата в десятом кадре совпадают друг с другом:
A10(−2, 1) , B10(−2, 1) , C10(−2, 1) , D10(−2, 1) .
y
B C
A D
H = A10 = B10 = C10 = D10 |
|
0 |
x |
Рис. 3.6: Десять кадров анимации.
84 |
Глава 3. Проективные операторы |
Часть II
Плоские кривые
85
Глава 4
Криволинейные траектории
Нетрудно передать процессору алгоритм построения прямой. Действительно, прямая может интерпретироваться как график линейной функции, и вычисление координат любой ее точки не составляет труда. На этом основан метод аппроксимации криволинейных траекторий, когда кривая приближенно заменяется многозвеньевой ломаной, визуально неотличимой от исходной кривой.
Однако часто бывает необходимо иметь точное описание кривой (например, если кривая должна произвольно масштабироваться). В этом случае производится интерполяция кривой по набору исходных данных: точкам, через которые она проходит, направлениям прохождения и т. д.
В этой главе мы рассмотрим методы описания кривых (см. раздел 4.1, стр. 87) и классифицируем задачи интерполяции кривых (см. раздел 4.2, стр. 91)
4.1Различные способы задания кривых
Везде в пределах второй части книги мы будем считать, что на плоскости π (или в физическом пространстве R3) фиксирована прямоугольная система координат1. Связывая переменные соотношениями (непосредственно или опосредованно при промощи вспомогательного параметра), мы можем получить описание любой кривой или любой поверхности.
Определение 34 (уравнение кривой) Пусть на плоскости π фиксирована прямоугольная система координат xOy. И пусть переменные x и y связаны соотношением:
F (x, y) = 0 .
Тогда множество точек плоскости π, координаты которых удовлетворяют этому уравнению, образуют на плоскости некоторую кривую C. Уравнение
1С точки зрения линейной алгебры, средствами которой мы пользовались в первой части, это означает, что на плоскости фиксирован ортонормированный базис. Это вполне согласуется с результатами, полученными в третьей главе: мы уже тогда предполагали наличие именно ортонормированного базиса на плоскости и в объемлющем пространстве.
87
88 |
Глава 4. Криволинейные траектории |
F (x, y) = 0 называется уравнением кривой C. Это обозначается следующим образом:
C : F (x, y) = 0 .
Пример 55 Уравнение x + y = 0 описывает на плоскости прямую, x2 + y2 −1 = 0
— единичную окружность, y − ex = 0 — экспоненциальную кривую и т. д.
Определение 35 (явные и неявные уравнения кривых) Допустим, кривая C описывается при помощи некоторого уравнения
C : F (x, y) = 0 .
Оно называется неявным уравнением кривой C, если из него невозможно выразить одну переменную через другую. Если же такое выражение возможно, то уравнение приобретает вид:
C : y = f (x) .
Такое уравнение называется явным уравнением кривой C.
Кривые, описанные неявными уравнениями, образуют более широкий класс кривых, нежели кривые, описанные при помощи явных уравнений. Действительно, из определения следует, что явное уравнение кривой есть частный случай неявного уравнения. Так, например, если уравнение допускает явное выражение переменной y через переменную x, то кривая, отвечающая уравнению
C : y = f (x) ,
является графиком функции f (x) и характеризуется тем, что любая вертикальная прямая пересекает ее не более, чем в одной точке. Вместе с тем, неявные кривые допускают множественное пересечение вертикальными прямыми, например — окружность x2 + y2 = 1 может пересекаться вертикальными пямыми в двух точках.
y |
|
y |
|
y |
|
|
F (x, y) = 0 |
||||
|
y = f (x) |
|
|
p(u) |
|
|
|
|
|
||
|
|
|
|
|
|
0 |
x |
0 |
x |
0 |
x |
(a) Явная кривая. |
|
(b) Неявная кривая. |
|
(c) Параметрическая кри- |
|
|
|
|
|
вая. |
|
Рис. 4.1: Различные способы задания кривых.
Определение 36 (параметрические уравнения кривой) Пусть p(u) —
функция, аргументом которой служит число, а в качестве значения она принимает вектор
p1 |
(u) |
, |
|
p2(u) |
|||
|
|||
4.1. Различные способы задания кривых |
89 |
где p1(u), p2(u) — явные функции переменной u. Такая функция называется параметрической (или — векторнозначной). Если параметр u пробегает значения из интервала [u1, u2] то вектор p(u) при этом описывает дугу некоторой прямой на плоскости. Эта кривая называется параметрически заданной плоской кривой.
Пример 56 Рассмотрим следующую функцию, заданную параметрически:
y |
u = π/2 |
p(u) = |
2 cos u |
, |
|
|
|
π/3 |
u [0, π/2] . |
||||
|
u = u = π/4 |
sin u |
||||
|
u = π/6 |
|
|
|
|
|
|
|
|
Она описывает некоторую кривую, точки |
|||
|
u = 0 |
которой удовлетворяют ее координатным |
||||
|
|
|
функциям. |
|
|
|
0 |
x |
|
|
|
||
|
|
|
|
|||
Последовательно придавая некоторые, хорошо известные из элементарной тригонометрии частные значения парметру u, вы-
числим декартовы координаты x и y вектора p(u).
Эта процедура отличается от привычного вычисления значения функции по значению переменной лишь тем, что в качестве независимой переменной здесь выступает параметр u, а вычисляемыми являются функции x и y.
u |
0 |
π/6 |
π/4 |
π/3 |
π/2 |
||||
|
|
|
|
|
|
|
|
|
|
|
|
√ |
|
|
√ |
|
|
|
|
x |
2 |
3 |
2 |
|
1 |
0 |
|||
y0 1/2 √2/2 √3/2 1
Соединим полученные точки плавной линией и получим дугу эллипса, расположенную в первой четверти (см. рис. 4.2, стр. 89).
Любую явную кривую можно параметризовать тривиальным образом. Действительно, если
y = f (x) ,
то тогда, полагая в качестве первой параметризующей функции параметр u, а в качестве второй — функцию f (u), получим:
u
p(u) = . f (u)
Следовательно, парметрические кривые, так же как и неявные, обобщают класс явных кривых.
Однако нельзя утверждать, что параметрические кривые обобщают класс неявных кривых (в ряде случаев параметризацию неявной кривой устроить можно, а в других — нет).
Тем не менее, параметрические кривые окажутся для наших целей наиболее подходящим инструментом, что демонстрирует следующий пример.
90 |
Глава 4. Криволинейные траектории |
Пример 57 Рассмотрим единичную окружность. Мы можем описать ее неявно:
x2 + y2 = 1 .
С другой стороны, эту же самую кривую мы можем параметризовать:
p(u) = |
cos u |
. |
|
sin u |
|||
|
|
Нетрудно убедиться, что эта парметризация действительно описывает то же самое геометрическое множество, что и неявное уравнение единичной окружности. Действительно, декартовы координаты вектора p(u) таковы:
x = cos u , y = sin u .
Возведем обе части обоих уравнений в квадрат и сложим результаты:
x2 + y2 = cos2 u + sin2 u , откуда x2 + y2 = 1 .
Вместе с тем, между неявной и параметрической записями есть существенная разница. Дело в том, что, параметризуя окружность, мы не указали промежуток изменения параметра u, а это значит, что окуржность, описанная параметрически (в отличие от окружности, описанной неявно), состоит из бесконечного числа витков.
Более того, если даже мы сузим параметрическую окружность до одного витка, указав промежуток изменения параметра u [0, 2π], то результат все равно будет отличаться от окружности, описанной неявно: в параметрическом случае окружность обладает динамикой, имеются стартовая точка и конечная, имеется направление обхода.
Таким образом, если требуется описать не просто геометрическое место точек на плоскости, но траекторию движения, то параметрическая форма записи оказывается явно предпочтительнее.
Имеется еще один аспект, определяющий предпочтительность параметрического варианта описания кривых. Он связан с обобщением понятия траектории с плоского случая на пространственный.
Аналитически (то есть при помощи явных или неявных уравнений) описать кривую в трехмерном пространстве можно только в виде системы. Действительно, при помощи одного уравнения
F (x, y, z) = 0
описывается поверхность. Аналогично можно описать еще одну поверхность:
G(x, y, z) = 0 .
Их пересечение есть кривая. Она описывается как решение системы уравнений:
F (x, y, z) = 0 ,
G(x, y, z) = 0 .
Мало того, что такое описание является очень громоздким, следует также иметь в виду, что не существует универсального алгоритма решения таких
