C3D Kernel  102057
Классы | Макросы | Функции
Базовые алгоритмы
Методы геометрических построений
Граф связей класса Базовые алгоритмы:

Классы

class  MbRegDuplicate
 Регистратор копируемых объектов. Подробнее...
class  MbAutoRegDuplicate
 Авторегистратор дублирования. Подробнее...
class  MbRegTransform
 Регистратор трансформируемых объектов. Подробнее...
class  MbAutoRegTransform
 Авторегистратор трансформации. Подробнее...

Макросы

#define __REG_DUPLICATE_IMPL(__CLASS)
 Создать копию объекта с использованием регистратора сдублированных объектов.

Функции

double & NormalizeAngle (double &angle, double angleEpsilon=Math::AngleEps)
 Нормализовать угол.
template<class Type >
double AngleBetweenVectors (const Type &v1, const Type &v2)
 Вычислить угол между двумя векторами.
template<class Vector >
bool ArFind (const Vector &arParam, double t, ptrdiff_t &id)
 Найти параметр в массиве.
bool InRange (double x1, double x2, double x)
 Лежит ли число в интервале [x1, x2].
bool IsParamOn (double tmin, double tmax, double t, double treg)
 Находится ли параметр в диапазоне кривой.
bool InRangePlus (double x1, double x, double eps=FLT_EPSILON)
 Лежит ли число в диапазоне [0, x1).
void SortSynchroArrays (SArray< double > &tt0, SArray< double > &tt2, double eps, bool checkCoincidentParams)
 Отсортировать массив.
void SortArray (SArray< double > &tt0, double eps, bool checkCoincidentParams)
 Отсортировать массив.
void CorrectParameter (bool pext, bool pc, double pmin, double pmax, double &p, double eps=Math::paramRegion)
 Уточнить параметр.
bool CorrectCheckNearParameter (const double &tmin, const double &tmax, const double &tPeriod, const bool &ext, const double &tRegion, double &t)
 Коррекция параметра с проверкой.
bool MatrixRoughInverse (const MbPlacement3D &place3D, const MbDirection *pDir, const MbVector3D &seeY, const MbVector3D &seeZ, MbMatrix &matrix)
 Определить матрицу инвертирования значка.
bool MatrixTextInverse (const MbPlacement3D &place3D, const MbDirection *pDir, const MbVector3D &seeY, const MbVector3D &seeZ, MbMatrix &matrix)
 Определить матрицу инвертирования текста.
template<class Point , class Vector >
bool ArePointsOnLine (const SArray< Point > &pnts, double metricEps=METRIC_EPSILON)
 Лежат ли точки на линии.
template<class Point , class Vector >
bool ArePointsOnLine (const std::vector< Point > &pnts, double metricEps=METRIC_EPSILON)
 Лежат ли точки на линии.
template<class PointsVector >
bool IsPlanar (const PointsVector &pnts, MbPlacement3D *place, double mEps=METRIC_EPSILON)
 Лежит ли набор точек на плоскости.
template<class Point >
bool IsPlanar2 (const Array2< Point > &pnts, MbPlacement3D *place, double mEps=METRIC_EPSILON)
 Лежит ли набор точек на плоскости.
template<class DoubleVector >
void SetLimitParam (DoubleVector &tarr, double tmin, double tmax, double teps=Math::paramEpsilon)
 Установить область изменения параметра.
bool RoundedValue (double &value, uint8 n)
 Округлить значение до n значащих цифр.
int QuadraticEquation (double a, double b, double c, double &d, std::pair< double, double > &res)
 Решить квадратное уравнение вида a * x^2 + b * x + c = 0 без внешнего управления погрешностью.
int QuadraticEquation (double a, double b, double c, double &x1, double &x2, double epsilon=Math::paramEpsilon)
 Решить квадратное уравнение вида a * x^2 + b * x + c = 0.
int QubicEquation (double a, double b, double c, double d, double *x, double epsilon)
 Решить кубическое уравнение вида a * x^3 + b * x^2 + c * x + d = 0.
int CubicEquation (double i1, double i2, double i3, double *x, double epsilon)
 Решить кубическое уравнение вида x^3 - i1 * x^2 + i2 * x - i3 = 0.
int Degree4Equation (double a, double b, double c, double d, double e, double *x, double epsilon)
 Решить уравнение четвертой степени вида a * x^4 + b * x^3 + с * x^2 + d * x + e = 0.
void EigenVector (double a[SPACE_DIM][SPACE_DIM], MbVector3D &vect)
 Определить собственный вектор матрицы 3 x 3.
void GetCosSin (const double &tt, double &cosT, double &sinT)
 Вычисление косинуса и синуса.
template<class Type >
double GetParamDistance (const Type &p1, const Type &p2, MbeSplineParamType spType)
 Дать меру расстояния.
bool IsValidNurbsParams (ptrdiff_t degree, bool closed, ptrdiff_t pcnt)
 Проверить параметры инициализации nurbs-объекта.
bool IsValidNurbsParams (ptrdiff_t degree, bool closed, ptrdiff_t pcnt, ptrdiff_t wcnt, ptrdiff_t kcnt)
 Проверить параметры инициализации nurbs-объекта.
template<class Point >
bool IsValidNurbsParams (ptrdiff_t degree, bool closed, const SArray< Point > &pnts, const SArray< double > *wts, const SArray< double > *knots)
 Проверить параметры инициализации nurbs-кривой.
template<class Point >
bool IsValidNurbsParams (ptrdiff_t degree, bool closed, const std::vector< Point > &pnts, const std::vector< double > *wts, const std::vector< double > *knots)
 Проверить параметры инициализации nurbs-кривой.
template<class KnotsVector >
bool IsValidNurbsKnots (const KnotsVector &knots, double eps=EXTENT_EPSILON)
 Проверить узловой вектор nurbs-объекта.
template<class KnotsVector >
ptrdiff_t KnotIndex (ptrdiff_t degree, const KnotsVector &knots, double &t)
 Определение индекса узла left для первой ненулевой функции.
template<class KnotsVector >
ptrdiff_t DefineKnotsVector (ptrdiff_t degree, bool closed, ptrdiff_t uppPointsIndex, KnotsVector &knots)
 Определить узловой вектор (равномерная параметризация).
bool DefineKnotsVector (ptrdiff_t degree, bool closed, size_t count, const SArray< double > *params, SArray< double > &knots)
 Определить узловой вектор.
template<class Points , class Params >
bool DefineThroughPointsParams (const Points &points, MbeSplineParamType spType, bool closed, Params &params)
 Определить параметрическое распределение точек.
template<class Knots , class DoubleVector >
bool BasisFuns (ptrdiff_t i, double t, ptrdiff_t p, const Knots &knots, DoubleVector &nsplines, DoubleVector &lrVect)
 Вычисление B - базиса (degree - порядок B-сплайна, p = (degree - 1) - степень полинома(B-сплайна)).
template<class DoubleVector >
bool CalcBsplvb (const DoubleVector &knots, double t, ptrdiff_t left, ptrdiff_t degree, DoubleVector &biatx, DoubleVector &lrVect)
void AllBasisFuns (ptrdiff_t i, double t, ptrdiff_t p, const SArray< double > &knots, double **ndu, double *left, double *right, bool newPatch=true)
void AllBasisFuns (ptrdiff_t i, double t, ptrdiff_t p, const SArray< double > &knots, double *ndu, size_t degree, double *left, double *right, bool newPatch=true)
bool CalcDBsplvb (const SArray< double > &knots, ptrdiff_t degree, double t, ptrdiff_t left, ptrdiff_t n, Array2< double > &values)
 Вычислить значения базисного сплайна и его производных.
template<class Point , class NurbsVector , class KnotsVector >
void CurveDeriveCpts (ptrdiff_t p, const KnotsVector &U, const Point *P, const double *W, size_t pointCount, const NurbsVector *PW, ptrdiff_t d, ptrdiff_t r1, ptrdiff_t r2, NurbsVector *PK)
 Вычислить все разностные формы кривой.
template<class Point , class NurbsVector , class KnotsVector >
void CurveDeriveCpts (ptrdiff_t p, const KnotsVector &U, const Point *P, const double w, size_t pointCount, const NurbsVector *PW, ptrdiff_t d, ptrdiff_t r1, ptrdiff_t r2, NurbsVector *PK)
 Вычислить все разностные формы кривой.
template<class Point , class Homogeneous >
void CurveDeriveCpts (ptrdiff_t p, const double *U, const Point *P, const double *W, size_t pointCount, ptrdiff_t r1, ptrdiff_t r2, Homogeneous *H0, Homogeneous *H1, Homogeneous *H2, Homogeneous *H3)
 Вычислить все разностные формы кривой.
void CheckParam (const double &tMin, const double &tMax, bool closed, double &t)
 Загнать параметр t в параметрическую область кривой.
template<class KnotsVector , class DoubleVector1 , class DoubleVector2 >
ptrdiff_t CalculateSplines (ptrdiff_t degree, const KnotsVector &knots, bool closed, double &t, DoubleVector1 &nsplines, DoubleVector2 &lrVect)
 Рассчитать ненулевые сплайны при данном параметре.

Макросы

#define __REG_DUPLICATE_IMPL (   __CLASS)
Макроопределение:
MbRefItem * copyItem = NULL;                            \
if ( iReg == NULL || !iReg->IsReg( this, copyItem ) ) { \
  copyItem = new __CLASS;                               \
  if ( iReg != NULL )                                   \
    iReg->SetReg( this, copyItem );                     \
}

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


Функции

double& NormalizeAngle ( double &  angle,
double  angleEpsilon = Math::AngleEps 
) [inline]

Исходный угол, если требуется, загоняется в интервал [0, 2*M_PI).

Аргументы:
[out]angle- Исходный угол, который требуется нормализовать.
[in]angleEpsilon- Погрешность угла.
template<class Type >
double AngleBetweenVectors ( const Type &  v1,
const Type &  v2 
) [inline]

Шаблонная функция. Применима для любых векторов.

Аргументы:
[in]v1- Вектор 1.
[in]v2- Вектор 2.
Возвращает:
Величину угла.
template<class Vector >
bool ArFind ( const Vector &  arParam,
double  t,
ptrdiff_t &  id 
) [inline]

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

Аргументы:
[in]arParam- Множество параметров.
[in]t- Значение параметра, которое требуется найти в массиве.
[out]id- Индекс найденного параметра в массиве.
Возвращает:
- true, если в массиве есть элементы,
иначе false
bool InRange ( double  x1,
double  x2,
double  x 
) [inline]

x1 может быть как началом, так и концом интервала, как и x2.

Аргументы:
[in]x1- Начало или конец исходного интервала.
[in]x2- Начало или конец исходного интервала.
[in]x- Исходное число, которое надо проверить.
Возвращает:
true, если x лежит внутри интервала,
иначе false.
bool IsParamOn ( double  tmin,
double  tmax,
double  t,
double  treg 
) [inline]

Диапазон кривой дается областью определения ее параметра [tmin, tmax].

Аргументы:
[in]tmin- Минимальное значение параметра.
[in]tmax- Максимальное значение параметра.
[in]t- Исходный параметр
[in]treg- Точность задания параметра.
Возвращает:
true, если t лежит внутри интервала [tmin, tmax],
иначе false.
bool InRangePlus ( double  x1,
double  x,
double  eps = FLT_EPSILON 
) [inline]

x1 >= 0

Аргументы:
[in]x1- Конец исходного интервала.
[in]x- Исходное число, которое надо проверить.
[in]eps- Точность.
Возвращает:
true, если x лежит внутри интервала,
иначе false.
void SortSynchroArrays ( SArray< double > &  tt0,
SArray< double > &  tt2,
double  eps,
bool  checkCoincidentParams 
)

Первый массив сортируется по возрастанию параметра. Элементы второго массива переставляются синхронно с элементами первого. Если установлен соответствующий флаг, то проводится проверка на наличие в массиве tt0 совпадающих параметров. Если они есть, то оставляется один и соответствующий ему в tt2. При этом в tt0 оставляется тот параметр, для которого соответствующий элемент в tt2 имеет минимальное значение.

Аргументы:
[out]tt0- Исходный массив 1 параметров, который требуется отсортировать.
[out]tt2- Исходный массив 2 параметров, который требуется отсортировать синхронно с tt0.
[in]eps- Точность сравнения параметров.
[in]checkCoincidentParams- Флаг проверки на наличие совпадающих параметров.
void SortArray ( SArray< double > &  tt0,
double  eps,
bool  checkCoincidentParams 
)

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

Аргументы:
[out]tt0- Исходный массив параметров, который требуется отсортировать.
[in]eps- Точность сравнения параметров.
[in]checkCoincidentParams- Флаг проверки на наличие совпадающих параметров.
void CorrectParameter ( bool  pext,
bool  pc,
double  pmin,
double  pmax,
double &  p,
double  eps = Math::paramRegion 
)

Если параметр замкнутый или должен находится не на расширении параметрической области, то он в случае необходимости загоняется внутрь интервала [pmin, pmax].

Аргументы:
[in]pext- Используется ли расширение параметрической области.
[in]pc- Замкнутость области определения параметра.
[in]pmin- Минимальное значение параметра.
[in]pmax- Максимальное значение параметра.
[out]p- Уточняемый параметр.
[in]eps- Точность вычислений.
bool CorrectCheckNearParameter ( const double &  tmin,
const double &  tmax,
const double &  tPeriod,
const bool &  ext,
const double &  tRegion,
double &  t 
)

Если после коррекции параметр выходит за пределы интервала [tmin, tmax], а флаг использования параметра на расширении параметрической области равен false, то параметр приравнивается либо к tmin, либо к tmax, в зависимости от того, с какой стороны он вышел за пределы интервала [tmin, tmax].

Аргументы:
[in]tmin- Минимальное значение параметра.
[in]tmax- Максимальное значение параметра.
[in]tPeriod- Период.
[in]ext- Используется ли расширение параметрической области.
[in]tRegion- Точность задания параметра.
[out]t- Уточняемый параметр.
Возвращает:
true, если не было выхода за пределы интервала [tmin, tmax] после коррекции,
иначе false.
bool MatrixRoughInverse ( const MbPlacement3D place3D,
const MbDirection pDir,
const MbVector3D seeY,
const MbVector3D seeZ,
MbMatrix matrix 
)

Рассчитывается матрица инвертирования в трехмерных размерах.

Аргументы:
[in]place3D- Локальная система координат.
[in]pDir- Направление.
[in]seeY- Ось Y экрана.
[in]seeZ- Ось Z экрана.
[out]matrix- Матрица инвертирования.
Возвращает:
true, если матрица найдена,
иначе false
bool MatrixTextInverse ( const MbPlacement3D place3D,
const MbDirection pDir,
const MbVector3D seeY,
const MbVector3D seeZ,
MbMatrix matrix 
)

Рассчитывается матрица инвертирования в трехмерных размерах.

Аргументы:
[in]place3D- Локальная система координат.
[in]pDir- Направление.
[in]seeY- Ось Y экрана.
[in]seeZ- Ось Z экрана.
[out]matrix- Матрица инвертирования.
Возвращает:
true, если матрица найдена,
иначе false
template<class Point , class Vector >
bool ArePointsOnLine ( const SArray< Point > &  pnts,
double  metricEps = METRIC_EPSILON 
)

Лежат ли точки на линии (улучшенный вариант IsPointOnLine).

Аргументы:
[in]pnts- Набор точек.
[in]metricEps- Точность проверки.
Возвращает:
true, если точки лежат на линии,
иначе false
template<class Point , class Vector >
bool ArePointsOnLine ( const std::vector< Point > &  pnts,
double  metricEps = METRIC_EPSILON 
)

Лежат ли точки на линии (улучшенный вариант IsPointOnLine).

Аргументы:
[in]pnts- Набор точек.
[in]metricEps- Точность проверки.
Возвращает:
true, если точки лежат на линии,
иначе false
template<class PointsVector >
bool IsPlanar ( const PointsVector &  pnts,
MbPlacement3D place,
double  mEps = METRIC_EPSILON 
)

Лежит ли набор точек на плоскости.

Аргументы:
[in]pnts- Набор точек.
[in,out]place- Система координат, в которой лежат точки.
[in]mEps- Точность проверки.
Возвращает:
true, если точки лежат на плоскости,
иначе false
template<class Point >
bool IsPlanar2 ( const Array2< Point > &  pnts,
MbPlacement3D place,
double  mEps = METRIC_EPSILON 
)

Лежит ли набор точек на плоскости.

Аргументы:
[in]pnts- Набор точек.
[in,out]place- Система координат, в которой лежат точки.
[in]mEps- Точность проверки.
Возвращает:
true, если точки лежат на плоскости,
иначе false
template<class DoubleVector >
void SetLimitParam ( DoubleVector &  tarr,
double  tmin,
double  tmax,
double  teps = Math::paramEpsilon 
)

Установить (репараметризовать) область изменения параметра в массиве.

Аргументы:
[in,out]params- Множество параметров, упорядоченный по возрастанию параметра.
[in]pmin- Минимальное значение параметра.
[in]pmax- Максимальное значение параметра.
bool RoundedValue ( double &  value,
uint8  n 
)

Округлить значение до n значащих цифр.

Аргументы:
[in,out]value- Округляемое число.
[in]n- Число значащих цифр.
Возвращает:
true, если округление выполнено, иначе false.
int QuadraticEquation ( double  a,
double  b,
double  c,
double &  d,
std::pair< double, double > &  res 
)

Решить квадратное уравнение вида a * x^2 + b * x + c = 0 без внешнего управления погрешностью.

Аргументы:
[in]a- Коэффициент при квадрате неизвестной.
[in]b- Коэффициент при неизвестной.
[in]c- Коэффициент - константный член уравнения.
[out]d- Дискриминант уравнения.
[out]res- Корни уравнения.
Возвращает:
Количество действительных решений и дискриминант уравнения.
int QuadraticEquation ( double  a,
double  b,
double  c,
double &  x1,
double &  x2,
double  epsilon = Math::paramEpsilon 
)

Решить квадратное уравнение вида a * x^2 + b * x + c = 0.

Аргументы:
[in]a- Коэффициент при квадрате неизвестной.
[in]b- Коэффициент при неизвестной.
[in]c- Коэффициент - константный член уравнения.
[out]x1- Первый корень уравнения.
[out]x2- Второй корень уравнения.
[in]epsilon- Погрешность нахождения решения.
Возвращает:
Количество действительных решений.
int QubicEquation ( double  a,
double  b,
double  c,
double  d,
double *  x,
double  epsilon 
)

Решить кубическое уравнение вида a * x^3 + b * x^2 + c * x + d = 0.

Аргументы:
[in]a- Коэффициент при кубе неизвестной.
[in]b- Коэффициент при квадрате неизвестной.
[in]c- Коэффициент при неизвестной.
[in]d- Коэффициент - константный член уравнения.
[out]x- Корни уравнения.
[in]epsilon- Погрешность нахождения решения.
Возвращает:
Количество действительных решений.
int CubicEquation ( double  i1,
double  i2,
double  i3,
double *  x,
double  epsilon 
)

Решить кубическое уравнение вида x^3 - i1 * x^2 + i2 * x - i3 = 0.

Аргументы:
[in]i1- Коэффициент при квадрате неизвестной.
[in]i2- Коэффициент при неизвестной.
[in]i3- Коэффициент - константный член уравнения.
[out]x- Корни уравнения.
[in]epsilon- Погрешность нахождения решения.
Возвращает:
Количество действительных решений.
int Degree4Equation ( double  a,
double  b,
double  c,
double  d,
double  e,
double *  x,
double  epsilon 
)

Решить уравнение четвертой степени вида a * x^4 + b * x^3 + с * x^2 + d * x + e = 0.

Аргументы:
[in]a- Коэффициент при четвертой степени неизвестной.
[in]b- Коэффициент при кубе неизвестной.
[in]c- Коэффициент при квадрате неизвестной.
[in]d- Коэффициент при неизвестной.
[in]e- Коэффициент - константный член уравнения.
[out]x- Корни уравнения.
[in]epsilon- Погрешность нахождения решения.
Возвращает:
Количество действительных решений.
void EigenVector ( double  a[SPACE_DIM][SPACE_DIM],
MbVector3D vect 
)

Определить собственный вектор матрицы 3 x 3.

Аргументы:
[in]a- Матрица 3 x 3.
[out]vect- Собственный вектор матрицы.
void GetCosSin ( const double &  tt,
double &  cosT,
double &  sinT 
) [inline]

В 1.7 раза быстрее, чем отдельное вычисление sin и cos, проверено под release с оптимизацией.

Аргументы:
[in]tt- Угол (в радианах).
[out]cosT- Косинус угла tt.
[out]sinT- Синус угла tt.
template<class Type >
double GetParamDistance ( const Type &  p1,
const Type &  p2,
MbeSplineParamType  spType 
)

Дать меру расстояния.

Аргументы:
[in]p1,p2- Точки между которыми ищется расстояние.
[in]spType- Тип параметризации сплайновых объектов.
Возвращает:
Расстояние.
bool IsValidNurbsParams ( ptrdiff_t  degree,
bool  closed,
ptrdiff_t  pcnt 
) [inline]

Проверить параметры инициализации nurbs-объекта.

Аргументы:
[in]degree- Порядок B-сплайна.
[in]closed- Признак замкнутости.
[in]pcnt- Число точек.
Возвращает:
true, если параметры согласованы.
bool IsValidNurbsParams ( ptrdiff_t  degree,
bool  closed,
ptrdiff_t  pcnt,
ptrdiff_t  wcnt,
ptrdiff_t  kcnt 
) [inline]

Проверить параметры инициализации nurbs-объекта.

Аргументы:
[in]degree- Порядок B-сплайна.
[in]closed- Признак замкнутости.
[in]pcnt- Число точек.
[in]wcnt- Число весов.
[in]kcnt- Число узлов.
Возвращает:
true, если параметры согласованы.
template<class Point >
bool IsValidNurbsParams ( ptrdiff_t  degree,
bool  closed,
const SArray< Point > &  pnts,
const SArray< double > *  wts,
const SArray< double > *  knots 
)

Проверить параметры инициализации nurbs-кривой.

Аргументы:
[in]degree- Порядок B-сплайна.
[in]closed- Признак замкнутости.
[in]pnts- Точки.
[in]wts- Веса точек.
[in]knots- Узловой вектор.
Возвращает:
true, если параметры согласованы.
template<class Point >
bool IsValidNurbsParams ( ptrdiff_t  degree,
bool  closed,
const std::vector< Point > &  pnts,
const std::vector< double > *  wts,
const std::vector< double > *  knots 
)

Проверить параметры инициализации nurbs-кривой.

Аргументы:
[in]degree- Порядок B-сплайна.
[in]closed- Признак замкнутости.
[in]pnts- Точки.
[in]wts- Веса точек.
[in]knots- Узловой вектор.
Возвращает:
true, если параметры согласованы.
template<class KnotsVector >
bool IsValidNurbsKnots ( const KnotsVector &  knots,
double  eps = EXTENT_EPSILON 
)

Проверить узловой вектор nurbs-объекта.

Аргументы:
[in]knots- Узловой вектор.
Возвращает:
true, если параметры согласованы.
template<class KnotsVector >
ptrdiff_t KnotIndex ( ptrdiff_t  degree,
const KnotsVector &  knots,
double &  t 
)

Определение индекса узла left для первой ненулевой функции (knots[mid] <= t < knots[mid + 1]).

Аргументы:
[in]degree- Порядок B-сплайна.
[in]knots- Множество узлов.
[in,out]t- Значение параметра.
Возвращает:
Индекс узла.
template<class KnotsVector >
ptrdiff_t DefineKnotsVector ( ptrdiff_t  degree,
bool  closed,
ptrdiff_t  uppPointsIndex,
KnotsVector &  knots 
)

Определить узловой вектор (равномерная параметризация).

Аргументы:
[in]degree- Порядок B-сплайна.
[in]closed- Признак замкнутости.
[in]uppPointsIndex- Индекс последней точки.
[in]knots- Узловой вектор.
bool DefineKnotsVector ( ptrdiff_t  degree,
bool  closed,
size_t  count,
const SArray< double > *  params,
SArray< double > &  knots 
)

Определить узловой вектор.

Аргументы:
[in]degree- Порядок B-сплайна.
[in]closed- Признак замкнутости.
[in]count- Количество точек.
[in]params- Параметры точек (для замкнутого count+1).
[out]knots- Узловой вектор.
Возвращает:
true, если набор параметров сформирован.
template<class Points , class Params >
bool DefineThroughPointsParams ( const Points &  points,
MbeSplineParamType  spType,
bool  closed,
Params &  params 
)

Определить параметрическое распределение точек.

Аргументы:
[in]points- Массив точек.
[in]spType- Тип параметризации сплайновых объектов.
[in]closed- Признак замкнутости.
[out]params- Параметрическое распределение точек.
Возвращает:
true, если набор параметров сформирован.
template<class Knots , class DoubleVector >
bool BasisFuns ( ptrdiff_t  i,
double  t,
ptrdiff_t  p,
const Knots &  knots,
DoubleVector &  nsplines,
DoubleVector &  lrVect 
)

Вычисление B - базиса (degree - порядок B-сплайна, p = (degree - 1) - степень полинома(B-сплайна)). Для ускорения используется рабочий вектор lr = { left[p+1], right[p+1] } ).

Аргументы:
[in]i- Индекс в массиве узлов, получаемый с помощью функции KnotIndex().
[in]t- Параметр.
[in]p- p = degree - 1, где degree - порядок B-сплайна.
[in]knots- Узловой вектор.
[out]nsplines- Массив размерности degree, заполняется значениями сплайна в поля 0..degree-2; nsplines[degree-1] = 0.
[in,out]lrVect- Массив размерности 2*(p+1) = 2*degree, содержимое игнорируется и будет перезаписано. Нужен для ускорения работы функции. В результате работы в нем останется мусор..
template<class DoubleVector >
bool CalcBsplvb ( const DoubleVector &  knots,
double  t,
ptrdiff_t  left,
ptrdiff_t  degree,
DoubleVector &  biatx,
DoubleVector &  lrVect 
)

Вычислить базисный сплайн по параметру t и узловому вектору.

void AllBasisFuns ( ptrdiff_t  i,
double  t,
ptrdiff_t  p,
const SArray< double > &  knots,
double **  ndu,
double *  left,
double *  right,
bool  newPatch = true 
)

Вычисление B - базиса ( с использованием рабочих указателей классов nurbs кривых и поверхностей ).

void AllBasisFuns ( ptrdiff_t  i,
double  t,
ptrdiff_t  p,
const SArray< double > &  knots,
double *  ndu,
size_t  degree,
double *  left,
double *  right,
bool  newPatch = true 
)

Вычисление B - базиса ( с использованием рабочих указателей классов nurbs кривых и поверхностей ).

bool CalcDBsplvb ( const SArray< double > &  knots,
ptrdiff_t  degree,
double  t,
ptrdiff_t  left,
ptrdiff_t  n,
Array2< double > &  values 
)
Аргументы:
[in]t- Параметр на кривой.
[in]left- Номер узла первого ненулевого сплайна.
[in]n- Порядок вычисляемых производных.
[out]values- Двумерный массив значений.
template<class Point , class NurbsVector , class KnotsVector >
void CurveDeriveCpts ( ptrdiff_t  p,
const KnotsVector &  U,
const Point P,
const double *  W,
size_t  pointCount,
const NurbsVector *  PW,
ptrdiff_t  d,
ptrdiff_t  r1,
ptrdiff_t  r2,
NurbsVector *  PK 
)

Вычислить все (или опционально некоторые) разностные формы кривой (характеристические производные).

template<class Point , class NurbsVector , class KnotsVector >
void CurveDeriveCpts ( ptrdiff_t  p,
const KnotsVector &  U,
const Point P,
const double  w,
size_t  pointCount,
const NurbsVector *  PW,
ptrdiff_t  d,
ptrdiff_t  r1,
ptrdiff_t  r2,
NurbsVector *  PK 
)

Вычислить все (или опционально некоторые) разностные формы кривой (характеристические производные).

template<class Point , class Homogeneous >
void CurveDeriveCpts ( ptrdiff_t  p,
const double *  U,
const Point P,
const double *  W,
size_t  pointCount,
ptrdiff_t  r1,
ptrdiff_t  r2,
Homogeneous *  H0,
Homogeneous *  H1,
Homogeneous *  H2,
Homogeneous *  H3 
)

Вычислить все (или опционально некоторые) разностные формы кривой (характеристические производные).

void CheckParam ( const double &  tMin,
const double &  tMax,
bool  closed,
double &  t 
) [inline]
Аргументы:
[in]tMin,tMax- Параметры, задающие параметрическую область кривой.
[in]closed- Признак замкнутости кривой.
[in,out]t- Исходный параметр.
template<class KnotsVector , class DoubleVector1 , class DoubleVector2 >
ptrdiff_t CalculateSplines ( ptrdiff_t  degree,
const KnotsVector &  knots,
bool  closed,
double &  t,
DoubleVector1 &  nsplines,
DoubleVector2 &  lrVect 
)
Аргументы:
[in]degree- Порядок B-сплайна.
[in]knots- Множество узлов.
[in]closed- Признак замкнутости.
[in,out]t- Параметр
[out]nsplines- Множество размерности degree, заполняется значениями сплайна.
[out]lrVect- Вспомогательный массив (содержит мусор).
Возвращает:
Номер первого ненулевого B-сплайна.
 Указатель Классы Пространства имен Файлы Функции Переменные Определения типов Перечисления Элементы перечислений Друзья Макросы