Контур MbContour3D

Класс MbContour3D объявлен в файле cur_contour3d.h.

Контур MbContour3D описывается множеством RPArray<MbCurve3D> segments стыкующихся друг за другом кривых и признаком периодичности кривой closed.

Контур представляет собой составную кривую. В отличие от других кривых контур может иметь изломы. Кривые, образующие контур, будем называть сегментами. Для сегментов контура выполняются следующие условия: начало каждого последующего сегмента совпадает с концом предыдущего сегмента. Для периодического контура начало первого сегмента совпадает с концом последнего сегмента. В случае, если контур содержит только один сегмент одного из следующих типов, он будет считаться непериодическим: MbLine3D, MbLineSegment3D, MbSpiral и производные от него классы, MbBridgeCurve3D. Для проверки совпадения начальной и конечной точек контура с заданной точностью необходимо использовать метод IsTouch(), который определяет совпадение независимо от гладкости замыкания. В общем случае в местах стыковки сегментов производные контура терпят разрыв по длине и направлению.

Начальное значение параметра контура равно нулю: tmin = 0. Параметрическая длина контура равна сумме параметрических длин составляющих его сегментов:

\[t_{\text{max}} = \sum \left( w_{i\text{max}} - w_{i\text{min}} \right),\]

где wimin и wimax — минимальное и максимальное значение параметра i-го сегмента. При вычислении радиуса-вектора точки контура сначала по значению параметра определяется рабочий сегмент и значение его локального параметра, далее вычисляется радиус-вектор рабочего сегмента, который служит радиусом-вектором контура.

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

\[\mathbf{r}(t) = \mathbf{segments}[k]\bigl(w_{k}\bigr),\]

где segments[k](wk) — рабочий сегмент контура с индексом k, wk — параметр рабочего сегмента, равный

\[w_{k} = w_{k\text{min}} + t - \sum_{i = 0}^{k-1} \bigl(w_{i\text{max}} - w_{i\text{min}}\bigr).\]

Сегмент с индексом k определяется по значению параметра контура t из условия

\[\sum_{i = 0}^{k-1} \bigl(w_{i\text{max}} - w_{i\text{min}}\bigr) \leq t < \sum_{i = 0}^{k} \bigl(w_{i\text{max}} - w_{i\text{min}}\bigr),\]

где wimin и wimax — минимальное и максимальное значение параметра i-го сегмента. Контур приведён на рисунке:

../../../../_images/O.4.18.1.png

В качестве сегментов контура не должны использоваться другие контуры. Если контур нужно построить на основе других контуров, то последние должны рассматриваться как совокупность составляющих их кривых, а не как единые кривые.

Контур MbContour3D представляет собой наиболее общий вид кривой.