Двумерный контур MbContour
Класс MbContour объявлен в файле cur_contour.h.
Двумерный контур MbContour описывается множеством RPArray<MbCurve> segments стыкующихся друг с другом кривых и признаком замкнутости кривой closed.
Двумерный контур представляет собой составную кривую. В отличие от других кривых контур может иметь изломы. Кривые, образующие контур, будем называть сегментами. Для сегментов контура выполняются следующие условия: начало каждого последующего сегмента совпадает с концом предыдущего сегмента. Для периодического контура начало первого сегмента совпадает с концом последнего сегмента. В случае, если контур содержит только один сегмент одного из следующих типов, он будет считаться непериодическим: MbLine, MbLineSegment, MbCosinusoid.
Для проверки замкнутости и непрерывности точек контура с заданной точностью следует использовать метод IsClosedContinuousC0(). Метод проверяет совпадение первой и последней точек контура, а также совпадение конца каждого сегмента с началом следующего. Проверка не требует гладкого соединения сегментов. По умолчанию используется точность 5.0 * PARAM_NEAR.
Начальное значение параметра контура равно нулю: tmin = 0. Параметрическая длина контура равна сумме параметрических длин составляющих его сегментов:
где wi min и wi max — минимальное и максимальное значение параметра i-го сегмента. При вычислении радиуса-вектора точки контура сначала по значению параметра определяется рабочий сегмент и значение его локального параметра, далее вычисляется радиус-вектор рабочего сегмента, который служит радиусом-вектором контура.
В методе
PointOn( double & t,
MbCartPoint & r )
радиус-вектор кривой r описывается векторной функцией
где segments[k]( wk ) — рабочий сегмент контура с индексом k, wk — параметр рабочего сегмента, равный
Сегмент с индексом k определяется по значению параметра контура t из условия
где wi min и wi max — минимальное и максимальное значение параметра i-го сегмента.
Контур приведён на рисунке:
В качестве сегментов двумерного контура не должны использоваться другие двумерные контуры. Если контур нужно построить на основе других контуров, то последние должны рассматриваться как совокупность составляющих их кривых, а не как единые кривые.