Глава I
1.2. Основные формы Кривой

Очевидно, позволяя координатным функциям `x(u)`, `y(u)` и `z(u)`, быть произволь­ными, мы получаем большое разнообразие кривых. Тем не менее, есть компромиссы в ходе реализации геометрической системы моделирования. Идеальной является ситуа­ция, позволяющая ограничиться классом функций, таким как:

Широко используемый класс функций - полиномы. Хотя они удовлетворяют пос­лед­ним двум критериям в этом списке, существует ряд важных типов кривых (поверх­нос­тей), которые не могут быть точно представлены с использованием полиномов; эти кривые должны быть приближены в системе с помощью полиномов. В этом и следую­щих разделах мы рассмотрим два общих метода выражения полиномиальных функций, базисную и Безье. Хотя они математически эквивалентны, но мы увидим, что метод Безье гораздо лучше подходит для представления и управления формой в компьютере.

Базисная кривая `n`-й степени задается:

`C(u)=(x(u),y(u),z(u))=sum_(i=0)^n a_iu^i`   `0<=u<=1` (1.5)

Где `a_i=(x_i,y_i,z_i)` вектор, следовательно

`x(u)=sum_(i=0)^n x_iu^i`   `y(u)=sum_(i=0)^n y_iu^i`   `z(u)=sum_(i=0)^n z_iu^i`

И в матричной форме и уравнения (1.5)

`C(u)=[a_0 a_1 ... a_n][[1],[u],[vdots],[u^n]]=[a_i]^T[u^i]` (1.6)

(Мы пишем вектор-строку как транспонированной вектор-столбец)

Дифференцируя Ур. (1.5) получаем

`a_i={C^(i)(u)|_{u=0}}/{i!}`

Где `C^((i)) (u)|_{u=0}` `i`’ая производная от `C(u)` по `u=0`. Функция `n+1`, `{u^i}`, называется базисной (или смешивающей) функцией, и `{a_i}` коэффициент степени представления базиса.

Дано `u_0`, рассчитать точку `C(u_0)` на степенной базисной кривой наиболее эффективно с использование метода Хорнера.

Основной алгоритм

Алгоритм А1.1

Horner1(a, n, u0, C)
{  /* Вычисление точки на степенной базисной кривой */
   /* Вход: a, n, u0*/
   /* Выход: C*/
C = a[n];
for (i=n-1; i>=0; i--)
   C=C*u0 + a[i];
}
  

Примеры

Пример1.1 `n=1`. `C(u)=a_1 u_0+a_0`, `0<=u<=1`, это линейный сегмент между точками `a_0` и `a_0+a_1` (рисунок 1.5). Константа `C'(u)=a_1` даёт направление линии
Пример1.2 `n=2`. В общем, `C(u)=a_0+a_1 u+a_2 u^2`, `0<=u<=1`, это параболическая дуга между точками `a_0` и `a_0+a_1+a_2` (рисунок 1.6) Это показано
  1. Преобразованием `C(u)` в плоскости `xy` (`C(u)` не лежит в уникальной плоскости);
  2. Установим `x=x_0+x_1 u+x_2 u^2` и `y=y_0+y_1 u+y_2 u^2`, этим мы устраним `u` и `u^2` из этих уравнений, что бы получить неявное уравнение второй степени по `x` и `y`;
  3. Отметим, что форма неявного уравнения - парабола.

Рисунок 1.5. Прямой линейный сегмент `C(u)=a_0+a_1u`

Рисунок 1.6. Параболическая дуга `C(u)=a_0+a_1u+a_2u^2`

Обратите внимание, что вектор ускорения, `C''(u)=2a_2`, является постоянным. Есть два специальных (вырожденных) интересных случая, оба возникают, когда вектор `a_2` параллелен начальному вектору касате­льной, `a_1` (когда `x_1 y_2=x_2 y_1`). В этом случае, вектор, касательный не включается, то есть, мы получаем прямую линию, вектор `a_2` может ука­зать в том же направлении, что и `a_1` (рис 1.7а), или в обратном напра­влении (рис. 1.7б). На рис 1.7б, `a_1+2a_2 u_0=0` для некоторого `0<=u<=1` (скорость стремится к нулю, остановка частицы), а часть отрезка будет проследить в обратном направлении.

Рисунок 1.7. `a_1` и `a_2` параллельны. В одном направлении

Рисунок 1.7. В противоположном

Пример1.3 n=3. Кубическая, `C(u)=a_0+a_1 u+a_2 u^2+a_3 u^3`, является очень рас­про­странённой кривой, не лежит на одной прямой (рис 1.8а); она может иметь точки перегиба (рис 1.8б); выступы (рис 1.8в); или петли (рис 1.8г). Самопересекающиеся кривая получается, если `a_0`, `a_1`, `a_2`, `a_3` не лежат на одной прямой. Точка перегиба на плоской кривой определяется как точка, где кривая гладкая (без выступов) и касательная в этой точке проходит через кривую. Это влечет за собой изменение в направлении поворота кривой. В точке перегиба, либо `C''(u)=0`, или `C'(u)|\|C''(u)`. Необходимым (но не достаточным) условием для пика в `u=u_0` является `C'(u_0)=0` (нулевая скорость). Условия возник­новения петель также известны.

Рисунок 1.8. Кубические кривые, (а) трехмерные витые; (б) точка перегиба; (в) острие; (г) петля.