Контур MbContour3D
Класс MbContour3D объявлен в файле cur_contour3d.h.
Контур MbContour3D описывается множеством RPArray<MbCurve3D> segments стыкующихся друг за другом кривых и признаком периодичности кривой closed.
Контур представляет собой составную кривую. В отличие от других кривых контур может иметь изломы. Кривые, образующие контур, будем называть сегментами. Для сегментов контура выполняются следующие условия: начало каждого последующего сегмента совпадает с концом предыдущего сегмента. Для периодического контура начало первого сегмента совпадает с концом последнего сегмента. В случае, если контур содержит только один сегмент одного из следующих типов, он будет считаться непериодическим: MbLine3D, MbLineSegment3D, MbSpiral и производные от него классы, MbBridgeCurve3D. Для проверки совпадения начальной и конечной точек контура с заданной точностью необходимо использовать метод IsTouch(), который определяет совпадение независимо от гладкости замыкания. В общем случае в местах стыковки сегментов производные контура терпят разрыв по длине и направлению.
Начальное значение параметра контура равно нулю: tmin = 0. Параметрическая длина контура равна сумме параметрических длин составляющих его сегментов:
где wimin и wimax — минимальное и максимальное значение параметра i-го сегмента. При вычислении радиуса-вектора точки контура сначала по значению параметра определяется рабочий сегмент и значение его локального параметра, далее вычисляется радиус-вектор рабочего сегмента, который служит радиусом-вектором контура.
В методе PointOn(double & t, MbCartPoint3D & r) радиус-вектор кривой r описывается векторной функцией
где segments[k](wk) — рабочий сегмент контура с индексом k, wk — параметр рабочего сегмента, равный
Сегмент с индексом k определяется по значению параметра контура t из условия
где wimin и wimax — минимальное и максимальное значение параметра i-го сегмента. Контур приведён на рисунке:
В качестве сегментов контура не должны использоваться другие контуры. Если контур нужно построить на основе других контуров, то последние должны рассматриваться как совокупность составляющих их кривых, а не как единые кривые.
Контур MbContour3D представляет собой наиболее общий вид кривой.