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

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

Годографом параметрической кривой r(t) = (x(t); y(t)), компоненты которой являются полиномами, называется кривая r(t) = (x'(t); y'(t)) .

Таким образом, кривая Безье, построенная по n точкам n(P_1 - P_0), n(P_2 - P_1), \dots, n(P_n - P_{n - 1}), является годографом исходной кривой Безье, построенной по точкам P_0, P_1, \dots, P_n.

Пример 20. Годографом квадратичной кривой Безье

x(t) = 2t;\\
 y(t) = 2t(1 - t),

где 0 \le t \le 1

(см. пример 16), является кривая x(t) = 2; y(t) = 2 - 4t, при 0 \le t \le 1, которая представляет собой отрезок прямой x = 2 для - 2 \le y \le 2 (рис. 3.23).

 Квадратичная кривая Безье и ее годограф - отрезок прямой

Рис. 3.23. Квадратичная кривая Безье и ее годограф - отрезок прямой

Пример 21. На рис. 3.24 показаны кубическая кривая Безье (справа) и ее годограф - квадратичная кривая Безье (слева).

 Кривая Безье (справа) и ее годограф (слева)

Рис. 3.24. Кривая Безье (справа) и ее годограф (слева)

Отметим также, что в 3D-графике, кроме кривых Безье, используются поверхности Безье.

B-сплайны

B-сплайны являются обобщениями кривых Безье.

Последовательность действительных чисел T = (t_0, t_1, \dots, t_m), таких что t_0 \le t_1 \le \dots \le t_m, называется узловым вектором, а сами эти числа - узлами.

Для заданного узлового вектора T положим:

N_{i,0}(t)=\begin{cases}
1, t \in [t_i;t_{i+1})\\
0, t \notin [t_i;t_{i+1});
\end{cases}\\
N_{i,k}(t)=\frac{t-t_i}{t_{i+k}-t_i}N_{I,k-1}(t)+\frac{t_{i+k+1}-t}{t_{i+k+1}-t_{i+1}}N_{i+1,k-1}(t),

для k > 0 (считается, что \frac00=0).

Функции N_{i,k}(t) называются базисными функциями степени k.

Например, при k = 1 и i \le1 имеем:

N_{0,1}(t)=\frac{t-t_0}{t_1-t_0}N_{0,0}(t)=\frac{t_2-t}{t_2-t_1}N_{1,0}(t),\\
N_{1,1}(t)=\frac{t-t_1}{t_3-t_1}N_{1,0}(t)+\frac{t_3-t}{T_3-t_2}N_{2,0}(t)

Пусть P_0, P_1, \dots, P_n - попарно различные точки плоскости.

B-сплайном, или базисным сплайном степени k называется кривая

r(t)=\sum_{i=0}^{n}N_{i,k}(t)P_i,

для n \ge k и t \in [t_k; t_{n + 1}], где базисные функции определены на узловом векторе T, который содержит n + k + 2 узлов: T = (t_0, t_1, \dots, t_{n + k + 1}).

Пример 22. Пусть n = k = 1 и T = (0, 0, 1, 1), так что имеются две точки P_0 и P_1 и узлы t_0 = t_1 = 0, t_2 = t_3 = 1. Тогда

N_{0,0}(t)=N_{2,0}(t)=0,

для t \in [0;1]

N_{1,0}(t)\begin{cases}
1, & \text{если}\; t \in [0;1);\\
0, & \text{если}\; t \notin [0;1)
\end{cases}

По приведенным выше формулам получаем, что для t \in [0; 1]

N_{0,1}(t)=1-t

и

N_{1,1}(t)=t

Поэтому B-сплайн первой степени для точек P_0 и P_1 описывается в виде r(t) = N_{0,1}(t)P_0 + N_{1,1}(t)P_1 = (1 - t)P_0 + tP_1, и для t \in [0; 1] представляет собой отрезок, соединяющий точки P_0 и P_1.

В общем случае B-сплайн степени k, для k \ge 1, совпадает при t \in [0; 1] с кривой Безье, если n = k, а узловой вектор имеет вид:

T=\underbrace{(0,\dots,0,}_{k=1} \underbrace{1,\dots,1)}_{k=1}

Пример 23. Пусть n = 3, k = 1 и T = (0, 0, 1, 2, 3, 3). Построим B-сплайн первой степени по 4 точкам P_0, P_1, P_2 и P_3:

r(t)=N_{0,1}(t)P_0+N_{1,1}(t)P_1+N_{2,1}(t)P_2+N_{3,1}(t)P_3

Имеем: t_0 = t_1 = 0, t_2 = 1, t_3 = 2, t_4 = t_5 = 3. Следовательно,

N_{0,0}(t)=N_{4,0}(t)=0

для t \in [0;3]

 N_{1,0}(t)\begin{cases}
1, t \in [0;1);\\
0, t \notin [0;1);
\end{cases}\\
N_{2,0}(t)\begin{cases}
1, t \in [1;2);\\
0, t \notin [1;2);
\end{cases}\\
N_{3,0}(t)\begin{cases}
1, t \in [2;3);\\
0, t \notin [2;3);
\end{cases}

Поэтому


N_{0,1}(t)=(1-t)N_{1,0}(t);\\
N_{1,1}(t)=tN_{1,0}(t)+(2-t)N_{2,0}(t)

Далее,

N_{2,1}=\frac{t-t_2}{t_3-t_2}N_{2,0}(t)=\frac{t_4-t}{t_4-t_3}N_{3,0}(t);\\
N_{}(t)=\frac{t-t_3}{t_4-t_3}N_{3,0}(t)+\frac{t_5-t}{t_5-t_4}N_{4,0}(t)

В нашем примере

N_{2,1}(t)-(t-1)N_{2,0}(t)+(3-t)N_{3,0}(t);\\
N_{3,1}(t)=(t-2)N_{3,0}(t)

Таким образом, B-сплайн описывается в виде:

 r(t)\begin{cases}
(1-t)P_o+tP_1, t \in [0;1);\\
(2-t)P_1+(t-1)P_2, t \in [1;2)\\
(3-t)P_2+(t-2)P_3, t \in [2;3)
\end{cases}

При t \in [0; 3] он представляет собой ломаную с вершинами P_0, P_1, P_2 и P_3 (рис. 3.25).

 B-сплайн первой степени с узлами (0, 0, 1, 2, 3, 3)

Рис. 3.25. B-сплайн первой степени с узлами (0, 0, 1, 2, 3, 3)

Такая же ломаная получается при t \in [1; 4], если в качестве узлового вектора взять (0, 1, 2, 3, 4, 5).

Пример 24. Пусть n = 3, k = 2 и T = (0, 0, 0, 1, 3, 3, 3). Построим B-сплайн второй степени по 4 точкам P_0, P_1, P_2 и P_3:

r(t)=N_{0,2}(t)P_0+N_{1,2}(t)P_1+N_{2,2}(t)P_2+N_{3.2}(t)P_3

Имеем: t_0 = t_1 = t_2 = 0, t_3 = 1, t_4 = t_5 = t_6 = 3. Поэтому

N_{0,0}(t)=N_{1,0}(t)=N_{4,0}(t)=N_{5,0}(t)=0;\\
N_{2,0}(t)\begin{cases}
1,t \in[0;1);\\
0, t \notin [0;1);
\end{cases}\\
N_{3,0}(t)=\begin{cases}
1, t \in [1;3);\\
0, t \notin [1;3).
\end{cases}

Следовательно, N_{0,1}(t)=0; N_{1,1}(t)=(1-t) N_{2,0}(t);

N_{2,1}(t)=tN_{2,0}(t)+\frac12(3-t)N_{3,0}(t);\\
N_{3,1}(t)=\frac12(t-1)N_{3,0}(t)

Далее,


N_{0,2}(t)=\frac{t-t_0}{t_2-t_0}N_{0,1}(t)+\frac{t_3-t}{t_3-t_0}N_{1,1}(t)\\
N_{1,2}(t)=\frac{t-t_1}{t_3-t_1}N_{1,1}(t)+\frac{t_4-t}{t_4-t_2}N_{2,1}(t)\\
N_{2,2}(t)=\frac{t-t_2}{t_4-t_2}N_{2,1}(t)+\frac{t_5-t}{t_5-t_3}N_{3,1}(t)\\
N_{3,2}(t)=\frac{t-t_3}{t_5-t_3}N_{3,1}(t)+\frac{t_6-t}{t_6-t_4}N_{4,1}(t)\\
N_{4,1}(t)=\frac{t-t_4}{t_5-t_4}N_{4,0}(t)+\frac{t_6-t}{t_6-t_5}N_{5,0}(t)

Поэтому

N_{0,2}(t)=(1-t)^2N_{2,0}(t);\\
N_{1,2}(t)=\frac{2}{3}t(3-2t)N_{2,0}(t)+\frac16(3-t)^2N_{3,0}(t);\\
N_{2,2}(t)=\frac{1}{3}(t-1)^2N_{2,0}(t)+\frac{1}{12}(3-t)(5t-3)N_{3,0}(t);\\
N_{3,2}(t)=\frac{1}{4}(t-1)^2N_{3,0}(t),

так как N_{4,0}(t)=0