Опубликован: 27.12.2010 | Уровень: специалист | Доступ: платный
Лекция 5:

Кривые и поверхности в компьютерной геометрии, I

Деление рациональной кривой Безье

Для заданного t^* из интервала (0,1) требуется построить два новых набора опорных точек и весов \{p_0^a, \dots , p_n^a \}, \{\omega_0^a, \dots  \omega_n^a\} и \{p_0^b, \dots , p_п^b\},\{\omega_0^b,  \dots ,\omega_n^b\} так, чтобы кривые Безье, построенные по этих новым наборам, совпали бы (как геометрическое место точек) соответственно с двумя дугами исходной кривой Безье, на которые она разбивается точкой r(t^*) .

Данная задача имеет важное значение в теории кривых Безье. Необходимость деления кривых Безье возникает в тех случаях, когда требуется изменить какую-то часть кривой, оставляя некоторую другую ее часть неизменной. Поскольку смещение любой опорной точки кривой Безье меняет всю ее в целом, возникает необходимость разбивать кривую Безье на несколько частей. Это дает возможность менять только одну из получившихся частей исходной кривой Безье (ставших уже самостоятельными кривыми Безье), не трогая остальные части исходной кривой.

Деление рациональной кривой Безье сводится к делению обычной кривой Безье, которая порождает данную рациональную кривую.

Рассмотрим рациональную кривую Безье, построенную по опорным точкам p_0, \dots , p_n с весами \omega_0 > 0, \dots , \omega_n > 0 . Обозначим ее через r_0(t; n), t \in [0,1] . Как мы знаем, эта кривая порождается обычной кривой Безье, построенной по вспомогательным опорным точкам \{\hat p_0, \dots ,\hat p_n\} = \{\omega_0p_0, \dots , \omega_np_n\} , которые зависят от выбора начала координат. При этом начало координат необходимо выбирать так, чтобы оно не совпадало ни с одной из опорных точек p_0, \dots , p_n . Обозначим построенную таким образом вспомогательную обычную кривую Безье через \hat r_0(t;n), t \in [0,1] . Разделим вспомогательную кривую \hat r_0(t;n) в точке t = t^* в отношении t^* : (1 - t^*) , как это делалось выше. Таким образом, возникает три вспомогательные (обычные) кривые Безье:

\hat r_0(t;n) - это кривая Безье, построенная по опорным точкам \hat p_0, \dots ,\hat p_n , t \in [0,1],

\hat r_0^a(s;n) - это кривая Безье, построенная по опорным точкам \hat p_0^a, \dots ,\hat p_n^a, s \in [0,1],

\hat r_0^b(q;n) - это кривая Безье, построенная по опорным точкам p \hat p_0^b, \dots , \hat p_n^b, q \in  [0,1]. Здесь

\hat p_i^a=\hat r_0(t^*;i)=(1-t^*+Et^*)^i \hat p_0,\\
\hat p_{n-i}^b=\hat r_{n-i}(t^*;i)=((1-t^*)L+t^*)^i \hat p_n, 0 \le i \le n ( 5.28)

Кривые Безье \hat r_0^a 0(s; n) и \hat r_0^b(q; n) порождают две рациональные кривые Безье r_0^a(s;n) и r_0^b(q;n) по следующему правилу:

r_0^a(s;n) - рациональная кривая Безье, построенная по опорным точкам p_0^a, \dots ,p_n^a с весами \omega_0^a, \dots ,\omega_n^a ,

r_0^b(q;n) - рациональная кривая Безье, построенная по опорным точкам p_0^b, \dots ,p_n^b с весами \omega_0^b, \dots ,\omega_b^b , где

p_i^a=r_0(t^*;i)=\frac{(1-t^*+Et*)^i\omega_0p_0}{(1-t^*+Et^*)^i\omega_0},\\
p_{n-i}^b=r_{n-i}(t^*;i)=\frac{((1-t^*)L+t^*)^i\omega_np_n}{((1-t^*)L+t^*)^i \omega_n}, ( 5.29)
\omega_i^a=(1-t^*+Et^*)^i \omega_0,\\
\omega_{n-i}^b=((1-t^*)L+t^*)^I \omega_n ( 5.30)

Из формул (5.28), (5.29) и (5.30) следует, что

\hat p_i^a=\omega_i^ap_i^a,\\
\hat p_i^b=\omega_i^bp_i^b, i=0, \dots, n ( 5.31)

Равенства (5.31) означают, что кривые Безье \hat r_0^a и \hat r_0^b соответствуют рациональным кривым Безье r_0^a и r_0^b с весами \{\omega_i^a\} и \{\omega_i^b\} соответственно.

Лемма 5.3. Кривые r_0^a(s; n) и r_0^b(q; n) делят кривую r_0(t; n) в точке t = t* в отношении t* :(1-t) .

Доказательство см. в [1].

Увеличение числа опорных точек рациональной кривой Безье

Операция увеличения числа опорных точек рациональной кривой Безье сводится к уже известной нам операции увеличения числа опорных точек обычной кривой Безье в пространстве R_+^{k+1} и применению отображения \varphi : R_+^{k+1} \to R^k, \varphi (x, \omega) =\frac{x}{\omega} . Более подробно, алгоритм состоит в следующем.

  1. По данной рациональной кривой Безье r_0(t; n) , определяемой опорными точками p_0, \dots , p_n и весами \omega_0, \dots , \omega_n , строим обычную кривую Безье r_0(t; n) в пространстве R_+^{k+1} , определяемую опорными точками \{ (\omega_0p_0, \omega_0), \dots , (\omega_n p_n, \omega_n) \} , \tilde p_i = (\omega_i p_i,\omegai) \in R_+^{k+1} . Тогда \varphi: \tilde r_0(t;n) \to r_0(t;n) .
  2. Увеличиваем число опорных точек обычной кривой Безье r_0(t;n) на единицу способом, описанным в разделе 3.6. А именно, строим новые опорные точки \tilde q_i \in R^{k+1}, i = 0, \dots , n + 1 , по формуле

    \tilde q_i = \frac{n+1-i}{n+1} \tilde p_ i (1 -\delta_{(n+1)i}) +\frac{i}{n+1} \tilde p_{i-1}(1 -\delta_{0 i}), i = 0, \dots  ,n + 1.

    Точки \tilde p_{-1} и \tilde p_{n+1} можно определить произвольно, т. к. они входят в правую часть последней формулы с нулевыми коэффициентами.

  3. Применяем к новым опорным точкам \tilde q_i преобразование \varphi : q_i = \varphi (\tilde q_i) . Поскольку кривая Безье \tilde r_0(t;n + 1) , определяемая опорными точками \{\tilde q_0, \dots ,\tilde q_{n+1}\}, - это та же самая кривая, что и \tilde r_0(t;n) , то \varphi (\tilde r_0(t;n+1) ) =r_0(t;n) . Но одновременно по определению рациональной кривой Безье имеем: \varphi (\tilde r_0(t;n+1) ) = r_0(t;n+ 1) , где r_0(t;n+ 1) - рациональная кривая Безье, определяемая опорными точками и весами \{ (q_0,\omega_0?), \dots , (q_{n+1}, \omega_{n+1}') \}, где \omega_i? =\tilde q_i^{ k+1} -(k + 1) -е компоненты точек \tilde q_i в R^{k+1}

    Окончательные формулы имеют вид

    \begin{cases}
q_i=\frac{i \omega_{i-1}p_{i-1}(n+1-i)\omega_ip_i}{i \omega_{i-1}+(n+1-i) \omega_i},
\omega_i'=\frac{i \omega_{i-1}+(n_1-i)\omega_i}{n+1},\\
\end{cases},\\
i=0, \dots, n+1

    где \{ (p_i , \omega_i) \}_{i =0}^n - исходные опорные точки и веса данной рациональной кривой Безье i а \{(q_i, \omega_i')\}_{i=0}^{n+1} - новые опорные точки и веса той же кривой, но - с увеличенным на единицу количеством опорных точек (и, соответственно, с большим на единицу количеством весов).

Светлана Петрова
Светлана Петрова
Украина
Марина Семенова
Марина Семенова
Россия, г. Чебоксары