Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Curves.doc
Скачиваний:
80
Добавлен:
01.09.2019
Размер:
4.51 Mб
Скачать

Кривые b-spline: Перемещение Контрольных Точек

Перемещение контрольных точек - самый очевидный способ изменения формы кривой B-spline. Схема локального изменения, обсуждавшаяся ранее, говорит о том, что изменение позиции контр. точки pi влияет на кривую p(u) только на промежутке [ui, ui+p+1), где p - это степень кривой B-spline. Фактически, измененние формы является переместительным в направлении смещенной контр. точки. Говоря точнее, если контр. точка pi сместилась в каком-то направлении а новое положение qi, то точка p(u), где u лежит на [ui, ui+p+1), сместится в том же направлении от pi до qi. Тем не менее, расстояние смещения различается среди разных точек. На следующих рисунках, контр. точка p4 перемещается из положения на первом рисунке в новое положение, показанное на среднем рисунке, и затем в конечное положение (правый рисунок). Как видите, точки, соответствующие узлам (помечены тпеугольниками), перемещаются в том же направлении.

Давайте присмотримся детальнее. Допустим, p(u) - это данная кривая B-spline степени p, определяемая как

Пусть контр. точка pi перемещается в новое положение pi + v. Тогда новая кривая B-spline степени p имеет вид:

Таким образом, новая кривая C(u) - это просто сумма исходной кривой p(u) и вектора переноса Ni,p(u)v. Так как Ni,p(u) не равно нулю на интервале [ui,ui+p+1), то, если u не на этом интервале, то член выражения, отвечающий за перенос, равняется нулю и не влияет на форму кривой. Таким образом, для кривых B-spline, перемещение контр. точки влияет только на форму одной секции. Изображенная ниже кривая слева - это кривая B-spline 4 степени (т.e. p = 4), построенная по 13 контр. точкам (т.e. n = 12) и 18 узлам (т.e. m = 17). Эти 18 узлов являются простыми и описывают фиксированную кривую (т.e., u0 = u1 = u2 = u3 = u4 = 0 и u13 = u14 = u15 = u16 = u17 = 1). Остальные узлы образуют 9 узловых интервалов, и, следовательно, 9 отрезков кривой, как показано на рисунке. Эти девять узловых интервалов и отрезков кривой обозначены так:

Интервал

[u4,u5)

[u5,u6)

[u6,u7)

[u7,u8)

[u8,u9)

[u9,u10)

[u10,u11)

[u11,u12)

[u12,u13)

Отрезок

1

2

3

4

5

6

7

8

9

Теперь давайте переместим p6. Результат показан на рисунке справа. Как видите, кривая сместилась в том же направлении, что и контр. точка p6. Коэффициент при p6 - это N6,4(u), а это не равно нулю на [u6, u11). Таким образом, перемещение p6 влияет на отрезки кривой 3, 4, 5, 6 и 7. Отрезки 1, 2, 8 и 9 остаются неизменными.

Некоторые Полезные Следствия Свойства Сильного Ограничивающего Многоугольника

Вспомним из свойства сильного ограничивающего многоугольника, что, если u лежит на [ui,ui+1), то p(u) лежит в ограничивающем многоугольнике, описываемом контр. точками pi, pi-1, ..., pi-p+1, pi-p. Это поможет нам решить следующие задачи в проектировании кривых:

  1. Сделаем криволинейный отрезок отрезком прямой: пусть p+1 контр. точек будут коллинеарными Если u лежит на узлово интервале [ui,ui+1), то p(u) лежит внутри ограничивающего многоугольника для p+1 контрольных точек pi, pi-1, ..., pi-p+1, pi-p. Так как это верно для всех u на этом интервале, то отрезок кривой, находящийся на этом узловом интервале, лежит целиком в этом оганичивающем многоугольнике. Все эти p+1 контрольных точек являются коллинеарными (т.e. лежат на одной прямой), ограничивающий многоугольник вырождается в отрезок прямой, то же самое. происходит и с содержащимся в нем отрезком кривой. В итоге, отрезок кривой на узловом интервале [ui,ui+1) становится отрезком прямой. Заметьте, что в этом случае отрезком прямой становится только этот отрезок кривой. Остальные отрезки остаются криволинейными.

А вот вам и пример. На рисунках изображены кривые, для которых n = 15 (т.e. 16 контр. точек), p = 3 (степень равна 3), а m = 19 (т.e. 20 узлов). Заметьте, что первые четыре и последние четыре фиксированы. На рисунке слева в верхнем ряду исходная кривая. Давайте-ка сделаем p9, p8, p7 и p6 колинеарными. Таким образом, отрезок кривой [u9,u10) лежит внутри огр. многоугольника точек p9, p8, p7 и p6. Так как этот многоугольник является отрезком прямой, то криволинейный отрезок также становится линейным. Но надо помнить, что первые четыре узла фиксированы и поэтому первых трех узловых интервалов нет. Так как [u9,u10) - это седмой узловой интервал, седьмой сегмент вырождается в отрезок прямой p7p8. Это показано на втором, третьем и четвертом рисунках.

Но почему вырождается только отрезок кривой на [u9,u10) ? Взгляните на второй рисунок. Темная область - это огранич. многоугольник прямо перед вхождением u в [u9,u10). Этот огранич. многоугольник образуется точками p8, p7, p6 и p5, и еще не является отрезком прямой. Как только u входит в [u9,u10), отрезок кривой вырождается (третий рисунок). Сразу после того, как u выходит из [u9,u10), появляется новый огранич. многоугольник (четвертый рисунок).

На пятом рисунке p5 коллинеарна со следующими за ней четырьмя точками. На этой кривой еще один линейный отрезок. На шестом рисунке p10 коллинеарна с предшествующими ей пятью точками; тем не менее, она перемещена в положение между p8 и p9. Это должно сделать часть соответствующего отрезка кривой линейным (почему?)

  1. Сделаем так, чтобы кривая B-spline проходила через контрольную точку: пусть p смежных контрольных точек будут одинаковыми Возьмем контр. точку pi. Так как отрезок кривой на узловом интервале [ui, ui+1) лежит целиком внутри огранич. многоугольника точек pi, ..., pi-p+1,pi-p, то, если сделать первые p контр. точек одинаковыми (т.e. pi = pi-1 = ... = pi-p+1), то огр. многоугольник сожмется до отрезка прямой pi-ppi, а кривая должна будет пройти через точку pi.

Степень кривой на левом рисунке равна 3. Если p5 переместить и сделать одинаковой с p6, кривая сместится ближе к p6, но все же не пройдет через нее. Это показано на среднем рисунке. Заметьте, что количество отрезков кривой от этого перемещения не изменяется; тем не менее, маленькая треугольная отметка рядом с p5 двигается ближе кp6.

Если p4 сместить и сделать одинаковой с p6 = p5, кривая пройдет через p6, а точка, соответствующая узлу, станет идентичной контрольной точке p4 из-за этого перемещения.

  1. Сделаем кривую B-spline касательной сегменту контрольной ломаной: пусть pi-p, pi-p+1 = pi-p+2 = .... = pi-1 = pi и pi+1 будут коллинеарны Здесь p контр. точек делаются одинаковыми. В этой контрольной точке непрерывность C0, потому что кривая имеет точку перегиба (или пересечения? блин) (смотри правый рисунок). Тем не менее, когда все узлы простые, кривая является Cp-1-непрерывной в узлах и бесконечно дифференцируемой в остальных местах, поэтому она является Cp-1-непрерывной в контрольнйо точке pi (сжатая контр. точка, перенумерованная в i) на сегменте pi-ppi, а также Cp-1-непрерывной в контрольной точке pi на сегменте pipi+1. Таким образом, если сделать контр. точки pi-p, pi и pi+1 колинеарными, то из-за того, что два смежных отрезка кривой не имеют точки перегиба в узле, они будут Cp-1-непрерывными в pi.

На рисунках выше - кривые 2 степени. Если сделать контр. точки 2, 3, 4 и 5 колинеарными, а 3 и 4 совместить, получим правый рисунок. Колинеарность делает отрезок кривой лежащим на прямой, а совмещенные контр. точки дают C3-1 = C2-непрерывность.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]