Составная кривая Безье MbBezier3D

Класс MbBezier3D объявлен в файле cur_bezier3d.h.

Составная кривая Безье является наследником кривой MbPolyCurve3D. Кривая описывается множеством контрольных точек SArray<MbCartPoint3D> pointList, количеством splinesCount кривых Безье и признаком периодичности кривой closed. У кривой есть ещё некоторые данные, которые не обязательны и служат для ускорения работы методов кривой.

Кривая построена на основе splinesCount кривых Безье третьей степени, которые гладко стыкуются между собой. Каждая кривая Безье определяется четырьмя контрольными точками и проходит только через две крайние точки. Составная кривая используется для построения сплайна, проходящего через заданные точки. Заданные точки служат точками сочленения кривых Безье третьей степени. Пара внутренних контрольных точек каждой кривой Безье третьей степени определяется из условия гладкой стыковки кривой с соседними кривыми. Для составной кривой количество контрольных точек равно 3(splinesCount+1). У непериодической составной кривой первая pointList[0] и последняя контрольные точки не используются.

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

В методе PointOn( double & t, MbCartPoint3D & r) радиус-вектор кривой r описывается векторной функцией найденного участка для его локального параметра w:

\[r(t) = \sum\limits_{j = 0}^{3} \frac{3!}{j!(3 - j)!} \cdot w^{j} (1 - w)^{3 - j} \cdot \mathbf{pointList}[3n + j],\]

где w = t - n, n ≤ t ≤ n + 1, 0 ≤ w ≤ 1,

\[B_{j}^{3}(w) = \frac{3!}{j!(3 - j)!} \cdot w^{j} (1 - w)^{3 - j}\]

– функции Бернштейна третьей степени для j-ой, j = 0, 1, 2, 3, контрольной точки pointList[3n + j] найденного участка с номером n.

Составная кривая Безье приведена на рисунке:

../../../../_images/O.4.8.1.png

Параметр кривой t принимает значения на отрезке: 0 ≤ t ≤ splinesCount. Кривая может быть периодической. Период периодической кривой равен splinesCount.

При целочисленных значениях параметра кривая проходит через контрольные точки, например, при параметре t = n кривая пройдёт через контрольную точку pointList[3n], n = 0,1,…, splinesCount.Производные кривой в точках сочленения кривых Безье третьей степени (при целочисленных значениях параметра) теряют непрерывность по длине.