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

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

Кривые на плоскости

Рассмотрим примеры построения кривых на плоскости.

Через две различные точки плоскости (x_0, y_0) и (x_1, y_1), такие чтоx_0 \ne x_1, можно провести прямую вида y = ax + b. Имеем:

\begin{cases}
y_0=ax_0_b,\\
y_1=ax_1+b.
\end{cases}

Если x_0 \ne x_1, то эта система относительно a и b имеет единственное решение. Если x_0 = x_1, то уравнение прямой имеет вид: x = x_0. В общем виде прямая описывается уравнением  (y - y_0)(x_1 - x_0) = (x - x_0)(y_1 - y_0) .

В параметрическом виде отрезок, соединяющий точки  (x_0, y_0) и  (x_1, y_1) , определяется следующим образом:

\begin{cases}
x(t)=(x_1-x_0)t+x_0;\\
y(t)=(y_1-y_2)t+y_0,
\end{cases}

где 0 \let \le1. Имеем: x(0) = x_0, y(0) = y_0, x(1) = x_1, y(1) = y_1. В векторной форме данное соотношение записывается в виде:

r(t)(P_1-P_0)t+P_0,

где

r(t)={x(t) \choose y(t)}, P_o={x_0 \choose y_0}, P_1={x_1 \choose y_1}

Аналогично, через три точки плоскости  (x_0, y_0), (x_1, y_1) и  (x_2, y_2) , абсциссы которых попарно различны, можно провести единственную кривую второго порядка, которая описывается многочленом второй степени (рис. 3.16 (a)). Его коэффициенты находятся из системы линейных уравнений относительно неизвестных a, b и c вида

\begin{cases}
y_0=ax_0^2+bx_0+c,\\
y_1=ax_1^2+bx_1+c,\\
y_2=ax_2^2+bx_2+c
\end{cases}

Определителем \Delta данной системы является определитель Вандермонда порядка 3, так что \Delta = (x_1 - x_0)(x_2 - x_0)(x_2 - x_1) .

(a) Парабола, проведенная через 3 точки; (b) кубическая парабола, проведенная через 4 точки

Рис. 3.16. (a) Парабола, проведенная через 3 точки; (b) кубическая парабола, проведенная через 4 точки

В общем случае, через n + 1 точку плоск n, который определяется однозначно, например, если абсциссы этих точек попарно различны. На рис. 3.16 (a) и (b) показаны примеры кривых, описываемых с помощью многочленов второй и третьей степени, которые проходят через 3 и через 4 заданные точки, соответственно.

Кривые на плоскости могут быть заданы

  1. явным образом с помощью одной или нескольких формул вида y = f(x), например y=\frac12x^3-2x^2+x+1 ( рис. 3.17 (a));
  2. неявно, с помощью неявной функции или функций вида F(x, y) = 0, например (x - 2)^2 + 2(y - 1)^2 = 16 (рис. 3.17 (b));
  3. параметрическим образом, например x(t) = t^3 - 2t, y(t) = t^2 - 2, где - -2 \le t \le 2 (рис. 3.17 (c)).
Задание кривых на плоскости: (a) явно; (b) неявно; (c) параметрически

Рис. 3.17. Задание кривых на плоскости: (a) явно; (b) неявно; (c) параметрически

Кривые, приведенные на рис. 3.17 (a) и (c), являются кубическими, а кривая на рис. 3.17 (b) - квадратичной.

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

Кривые Безье

Положим b_{k,n}(c)=C_n^kt^k(1-t)^{n-k}, где C_n^k=\frac{n!}{k!(n-k)!}, k и n - целые, n \ge 0, 0 \le k \le n, а t принадлежит множеству действительных чисел.

Полиномы b_{k, n}(t) называются полиномами Берштейна.

Пусть P_0, P_1, \dots, P_n - попарно различные точки плоскости, такие что P_j={x_j \choose y_j}, для j = 0, 1, \dots, n.

Кривой Безье называется параметрическая кривая степени n, которая определяется следующим образом:

r(t)=B_n(P_0,P_1,\dots, P_n;t)=\sum_{k=0}^{n}B_{k,n}(t)P_k,

для 0 \let \le1, где r(t) - координаты точек кривой Безье, соответствующих параметру t. Кривая названа по имени одного из ее изобретателей Пьера Безье (1962).

Заметим, что при t = 0 получается точка P_0, а при t = 1 - точка P_n.

Если точка одна, то B_0(P_0; t) \equiv P_0, так как b_{0, 0}(t) \equiv 1. Рассмотрим подробнее кривые Безье для n = 1, 2, 3.

Пусть n = 1, и для построения кривой используются точки P_0 и P_1. Тогда кривая Безье описывается следующим образом:

r(t) = B_1(P_0, P_1; t) = (1 - t)P_0 + tP_1,

где t \in [0; 1]. В матричной форме кривую можно представить в виде

B_1(P_0,P_1;t)=(1 \quad t)\begin{pmatrix}
1&0\\
-1&1
\end{pmatrix}{P_0 \choose P_1}

Координаты точек кривой удовлетворяют соотношению r(t) = (P_1 - P_0)t + P_0 (см. п. 3.2.2), так что кривая Безье представляет собой отрезок, соединяющий точки P_0 и P_1 (рис. 3.18).

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

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

Пусть n = 2. Тогда кривая Безье описывается следующим образом: r(t) = B_2(P_0, P_1, P_2; t) = (1 - t)^2P_0 + 2t(1 - t)P_1 + t^2P_2, где t \in [0; 1], или, в матричной форме,

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

Нетрудно заметить, что кривые Безье, построенные по трем точкам, являются квадратичными кривыми. Они используются, например, для создания шрифтов True Type.

Пример 16. Найдем уравнение кривой Безье второго порядка, которая строится по точкам P_0 = (0; 0), P_1 = (1; 1) и P_2 = (2; 0) . Имеем:


\left(\!
    \begin{array}{c}
      x \\
      y
    \end{array}
  \!\right)
(t) = (1-t)^2\left(\!
    \begin{array}{c}
      0 \\
      
    \end{array}
  \!\right)+2t(1-t)
\left(\!
    \begin{array}{c}
      1 \\
      1
    \end{array}
  \!\right)+t^2
\left(\!
    \begin{array}{c}
      2 \\
      2
    \end{array}
  \!\right)

Поэтому x(t) = 2t(1 - t) + 2t^2 = 2t; y(t) = 2t(1 - t), где 0 \le t \le 1. Следовательно, координаты x и y точек кривой Безье связаны соотношением:

y=x\left(1-\frac{x}{2} \right)=x-\frac{1}{2}x^2=-\frac{1}{2}(x-1)^2+\frac{1}{2},

где 0 \le x \le 2 (рис. 3.19).

Кривая Безье 2 порядка для точек..

Рис. 3.19. Кривая Безье 2 порядка для точек..

В компьютерной графике используются кубические кривые Безье, которые строятся по 4 точкам. Итак, пусть n = 3. Тогда кривая Безье задается формулой r(t) = B_3(P_0, P_1, P_2, P_3; t) = (1 - t)^3P_0 + 3t(1 - t)^2P_1 + 3t^2(1 - t)P_2 + t^3P_3, где t \in [0; 1]. Соответственно, матричная форма имеет вид: