Российский государственный гуманитарный университет
Опубликован: 13.07.2022 | Доступ: свободный | Студентов: 346 / 38 | Длительность: 11:54:00
Специальности: Программист
Лекция 3:

Представление графической информации

B_3(P_0,P_1,P_2,P_3;t)=(1t \quad t^2 \quad t^3)\begin{pmatrix}
1&0&0&0\\
-3&3&0&0\\
3&-6&3&0\\
-1&3&-3&1\end{pmatrix}
\begin{pmatrix}
P_0\\
P_1\\
P_2\\
P_3\end{pmatrix}

В общем случае столбец j матрицы порядка n + 1 кривой Безье B_n(P_0, P_1, \dots, P_n; t) образуют коэффициенты при 1, t, \dots, t^n полинома b_{j,n}.

Найдем значения производной кривой Безье в точках P_0 и P_n. Для n > 0 и t \in [0; 1] имеем (см. ниже утверждение 3):

r'(t)n\sum_{k=0}^{n-1}b_{k,n-1}(t)(P_{k+1}-P_k)

Следовательно, r' (0) = n(P_1 - P_0) и r'(1) = n(P_n - P_{n - 1}).

Производная в точке t_0, если существует, находится в виде: y'_x(1)=\frac{y' (t_0)}{x'(t_0)}. Поэтому y'_x(0)=\frac{y_1-y_0}{x_1-x_0}, если x_1 \ne x_0, и y'_x(1)=\frac{y_n-y_{n-1}}{x_n-x_{n-1}}, если x_n \ne x_{n - 1}. Таким образом, кривая Безье касается в точке P_0 отрезка [P_0; P_1] , а в точке P_n - отрезка  [P_n; P_{n - 1}].

Выпуклым называется множество, содержащее для любой пары его точек A и B все точки отрезка, соединяющего точки A и B. Выпуклой оболочкой множества точек является наименьшее выпуклое множество, содержащее эти точки.

Утверждение 1. Для n \ge 1 выполняется соотношение

B_n(P_0, P_1, \dots, P_n; t) = B_1(B_{n - }1(P_0, \dots, P_{n - 1}; t), B_{n - 1}(P_1, \dots, P_n; t); t)

Доказательство. Имеем:

B_1(B_{n-1}(P_0,\dots, _{n-1};t), B_{n-1}(P_1,\dots, P_n;t);t)=\\
=(1-t)B_{n-1}(P_0,\dots, P_{n-1};t)+tB_{n-1}(P_1,\dots, P-n;t)=\\
=\sum_{k=0}^{n-1}C_{n-1}^{k}t^k(1-t)^{n-k}P_k+\sum_{k=0}^{n-1}C_{n-q}^kt^{k+1}(1-t)^{n-1-k}P_{k+1}=\\
=(1-t)^nP_0+\sum_{k=1}^{n-1}(C_{n-1}^k+C_{n-1}^{k-1})t^k(1-t)^{n-k}P_k+t^nP_n=\\
=\sum_{k=0}^{n}C_n^kt^k(1-t)^{n-k}P_k=B_n(P_0, P_1, \dots, P_n;t).

Из утверждения 1 следует, что кривая Безье не выходит за пределы выпуклой оболочки точек P_0, P_1, \dots, P_n.

Утверждение 2. Для n \ge 1 имеет место равенство:

B_n(P_0, P_1, \dots, P_n; t) = B_{n - 1}(B_1(P_0, P_1; t), B_1(P_1, P_2; t), \dots, B_1(P_{n - 1}, P_n; t); t)

Доказательство. Имеем:

B_{n-1}(B_1(P_0, P_1;t),B_1(P_1, P_2;t),\dots, B_1(P_{n-1}, P_n;t);t)=\\
=\sum_{k=0}^{n-1}C_{n-1}^k(1-t)^{n-1-k}B_1(P_k, P_{k+1};t)=\\
=\sum_{k=0}^{n-1}C_{n-1}^kt^k(1-t)^{n-1-k}((1-t)P_k+tP_{k+1})=\\
=\sum_{k=0}^{n-1}C_{n-1}^kt^k(1-t)^{n-k}P_k+\sum_{k=0}^{n-1}t^{k+1}(1-t)^{n-1-k}P_{k+1}=\\
=(1-t)^nP_0+\sum_{k=0}^{n-1}(C_{n-1}^k+C_{n-1}^{k-1})t^k(1-t)^{n-k}P_k+t^nP_n=\\
=\sum_{k=0}^nC_n^kt^k(1-t)^{n-k}P_k=B_n(P_0, P_1, \dots, P_n;t)

На утверждении 2 основан метод приближенного построения кривых Безье, созданный Полем де Кастельжо, еще одним изобретателем этих кривых (1959). Например, из утверждения 2 следует, что точка кривой Безье порядка n, соответствующая t = 0,5, совпадает при t = 0,5 с точкой кривой Безье порядка n - 1, построенной по точкам M_0, M_1, \dots, M_{n - 1}, которые являются серединами отрезков, соединяющих точки P_0 и P_1, P_1 и P_2, \dots, P_{n - 1} и P_n, соответственно.

Пример 17. Рассмотрим точки A, B, и C квадратичной кривой Безье, построенной в примере 16 (см. рис. 3.20), соответствующие значениям 0,25, 0,5 и 0,75 параметра t. По утверждению 2,

B_2(P_0, P_1, P_2; t) = B_1(B_1(P_0, P_1; t), B_1(P_1, P_2; t); t).

Кривыми Безье первого порядка, построенными по точкам P_0 и P_1, а также P_1 и P_2, являются соответственно отрезки P_0P_1 и P_1P_2 ( рис. 3.20). Значениям 0,25, 0,5 и 0,75 параметра t на них соответствуют точки Q_0, M_0, R_0 и Q_1, M_1, R_1, которые делят эти отрезки на 4 равные части. Имеем:

B_2(P_0, P_1, P_2; 0,25)= B_1(B_1(P_0, P_1; 0,25), B_1(P_1, P_2; 0,25); 0,25) = B_1(Q_0, Q_1; 0,25);\\
B_2(P_0, P_1, P_2; 0,5) = B_1(M_0, M_1; 0,5);\\
B_2(P_0, P_1, P_2; 0,75)= B_1(R_0, R_1; 0,75).

Следовательно, точка A квадратичной кривой Безье совпадает с точкой отрезка Q_0Q_1, которая отстоит на четверть от его конца Q_0, точка B - с серединой отрезка M_0M_1 и точка C - с точкой отрезка R_0R_1, отстоящей на три четверти от его конца R_0.

 Точки A, B и C кривых Безье второго и первого порядков

Рис. 3.20. Точки A, B и C кривых Безье второго и первого порядков

Рассмотрим примеры приближенного построения кривых Безье. Будем использовать 3 вспомогательные точки, которые соответствуют значениям 0,25, 0,5 и 0,75 параметра t.

Пример 18. Построим кривую Безье по 3 точкам P_0, P_1 и P_2. Соединим отрезками точки P_0 и P_1, а также P_1 и P_2, и разделим каждый отрезок на 4 равные части, отметив на них по 3 точки - концы этих частей. Занумеруем эти точки так, как показано на 3.21рис..

Соединим отрезками точки с равными номерами и отметим на первом из них точку A, отстоящую на четверть от первого конца отрезка, на втором - середину B и на третьем отрезке - точку C, отстоящую на три четверти от первого его конца.

Теперь проведем кривую, которая проходит через точки P_0, A, B, C и P_2 так, чтобы она касалась построенных отрезков и не выходила за их пределы, как показано на рисунке 3.21.

 Построение кривой Безье по 3 точкам

Рис. 3.21. Построение кривой Безье по 3 точкам

Пример 19. Построим кривую Безье по 4 точкам P_0, P_1, P_2 и P_3, как показано на рис. 3.22. Как и ранее, соединим точки P_0 и P_1, P_1 и P_2, P_2 и P_3 отрезками и разделим каждый отрезок на 4 равные части, занумеровав точки деления так, как показано на рисунке. Последовательно соединим отрезками точки с равными номерами.

На первой паре отрезков отметим точки, отстоящие от первого конца отрезка на четверть, соединим их и на новом отрезке отметим точку A, отстоящую на четверть от первого конца отрезка. Точно так же, соединим середины второй пары отрезков и на новом отрезке отметим середину B. На третьей паре отрезков отметим точки, отстоящие от начала на три четверти, соединим их и на новом отрезке отметим точку C, отстоящую на три четверти от первого его конца.

 Построение кривой Безье по 4 точкам

Рис. 3.22. Построение кривой Безье по 4 точкам

Проведем кривую, которая проходит через точки P_0, A, B, C и P_3 и касается в них построенных отрезков, но не выходит за их пределы.

Утверждение 3. Для n > 0 и t \in [0; 1] выполняется соотношение

\frac{d}{dt}\sum_{k=0}^{n}b_{k,n}(t)P_k=n\sum_{k=0}^{n-1}B_{k,n-1}(t)(P_{k+1}-P_k)

Доказательство. Имеем:

\frac{d}{dt}\sum_{k=0}^{n}b_{k,n}(t)P_k =(\sum_{k=0}^nC_n^kt^k(1-t)^{n-k}P_k)'=\\
=\sum_{k=0}^nC_n^k(kt^{k-1}(1-t)^{n-k}-(n-k)t^k(1-t)^{n-k-1}P_k=\\
=\sum_{k=0|^nC_n^kkt^{k-1}(1-t)^{n-k}P_k-\sum_{k=0}^n-1}C_k^n(n-k)t^k(1-t)^{n-k-1}P_k=\\
=\sum_{k=0}^{n-1}(C_n^{k+1}(k+1)P_{k+1}-C_n^k(n-k)P_k)t^k(1-t)^{n-k-1}=\\
=n\sum_{k=0}^{n-1}C_{n-1}^kt^k(1-t)^{n-k-1}(P_{k+1}-P_k),

так как C_n^{k+1}(k+1)=nC_n^k(n-k).

Следствие. Для n > 1 является верным равенство

 (B_n(P_0, P_1, \dots, P_n; t))' = B_{n - 1}(n(P_1 - P_0), n(P_2 - P_1), \dots, n(P_n - P_{n - 1}); t).