C3D Toolkit  Kernel - 107186, Vision - 190715.107186
+ Граф связей класса Базовые алгоритмы:

Классы

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

Макросы

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

Функции

double & c3d::NormalizeAngle (double &angle, double angleEpsilon=Math::AngleEps)
 Нормализовать угол. Подробнее...
 
template<class Type >
double c3d::AngleBetweenVectors (const Type &v1, const Type &v2)
 Вычислить угол между двумя векторами. Подробнее...
 
template<class Vector >
bool c3d::ArFind (const Vector &arParam, double t, ptrdiff_t &id)
 Найти параметр в массиве. Подробнее...
 
bool c3d::InRange (double x1, double x2, double x)
 Лежит ли число в интервале [x1, x2]. Подробнее...
 
bool c3d::IsParamOn (double tmin, double tmax, double t, double treg)
 Находится ли параметр в диапазоне кривой. Подробнее...
 
bool c3d::InRangePlus (double x1, double x, double eps=FLT_EPSILON)
 Лежит ли число в диапазоне [0, x1). Подробнее...
 
template<class TypeVector >
bool c3d::IsMonotonic (const TypeVector &items, bool isAscending, bool allowEqual=false)
 Нормализован ли массив объектов по возрастанию или убыванию. Подробнее...
 
template<class Point , class Vector >
bool c3d::ArePointsOnLine (const SArray< Point > &pnts, double metricEps=METRIC_EPSILON)
 Лежат ли точки на линии. Подробнее...
 
template<class Point , class Vector >
bool c3d::ArePointsOnLine (const std::vector< Point > &pnts, double metricEps=METRIC_EPSILON)
 Лежат ли точки на линии. Подробнее...
 
template<class PointsVector >
bool c3d::IsPlanar (const PointsVector &pnts, MbPlacement3D *place, double mEps=METRIC_EPSILON)
 Лежит ли набор точек на плоскости. Подробнее...
 
template<class Point >
bool c3d::IsPlanar2 (const Array2< Point > &pnts, MbPlacement3D *place, double mEps=METRIC_EPSILON)
 Лежит ли набор точек на плоскости. Подробнее...
 
template<class DoubleVector >
void c3d::SetLimitParam (DoubleVector &tarr, double tmin, double tmax, double teps=Math::paramEpsilon)
 Установить область изменения параметра. Подробнее...
 
template<class DoubleParamsVector >
bool SortSynchroArrays (DoubleParamsVector &tt0, DoubleParamsVector &tt2, double eps, bool checkCoincidentParams)
 Отсортировать массив. Подробнее...
 
template<class DoubleParamsVector >
void SortArray (DoubleParamsVector &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)
 Определить матрицу инвертирования текста. Подробнее...
 
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[c3d::SPACE_DIM][c3d::SPACE_DIM], MbVector3D &vect)
 Определить собственный вектор матрицы 3 x 3. Подробнее...
 
template<class Point >
bool c3d::EqualPoints (const Point &p1, const Point &p2, double eps)
 Проверить точки на равенство. Подробнее...
 
template<class Vector >
bool c3d::EqualVectors (const Vector &p1, const Vector &p2, double eps)
 Проверить векторы на равенство с заданной точностью. Подробнее...
 
template<class Matrix >
bool c3d::EqualMatrices (const Matrix &m1, const Matrix &m2, double accuracy)
 Сравнить матрицы. Подробнее...
 
void c3d::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, size_t pcnt)
 Проверить параметры инициализации nurbs-объекта. Подробнее...
 
bool IsValidNurbsParams (ptrdiff_t degree, bool closed, size_t pcnt, size_t wcnt)
 Проверить параметры инициализации nurbs-объекта. Подробнее...
 
bool IsValidNurbsParams (ptrdiff_t degree, bool closed, size_t pcnt, size_t wcnt, size_t kcnt)
 Проверить параметры инициализации nurbs-объекта. Подробнее...
 
template<class KnotsVector >
bool IsValidNurbsParamsExt (ptrdiff_t degree, bool closed, size_t pcnt, const KnotsVector &knots)
 Проверить параметры инициализации nurbs-кривой. Подробнее...
 
template<class PointVector , class DoubleVector >
bool IsValidNurbsParamsExt (ptrdiff_t degree, bool closed, const PointVector &pnts, const DoubleVector *wts, const DoubleVector *knots=NULL)
 Проверить параметры инициализации 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)
 Вычислить базисный сплайн по параметру 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)
 Вычислить значения базисного сплайна и его производных. Подробнее...
 
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 NurbsVector , class KnotsVector , class DoubleTriple >
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, DoubleTriple **DT, double **WT)
 Вычислить все разностные формы кривой. Подробнее...
 
template<class Point , class NurbsVector , class KnotsVector , class DoubleTriple >
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, DoubleTriple **DT, double **WT)
 Вычислить все разностные формы кривой. Подробнее...
 
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)
 Рассчитать ненулевые сплайны при данном параметре. Подробнее...
 
template<class Type >
void Swap (Type *arr, size_t ind1, size_t ind2)
 Перестановка 2 элементов в массиве. Подробнее...
 
template<class Type , class Type2 , class Type3 >
void InsertSort (Type *base, size_t num, KsQSortCompFunc compareFunc, Type2 *base2=NULL, Type3 *base3=NULL)
 Сортировка массива с возможностью синхронной перестановки элементов в двух других массивах. Эффективна для небольших массивов. Подробнее...
 
template<class Type , class Type2 , class Type3 >
void QuickSort (Type *base, size_t num, KsQSortCompFunc compareFunc, Type2 *base2=NULL, Type3 *base3=NULL)
 Сортировка массива с возможностью синхронной перестановки элементов в двух других массивах. Работает с массивами элементов, которые предоставляют оператор присваивания. Не гарантирует сохранение порядка равных элементов. Подробнее...
 

Подробное описание

Макросы

◆ __REG_DUPLICATE_IMPL

#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 ); \
}
Объект с подсчетом ссылок.
Definition: reference_item.h:91

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

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

Функции

◆ NormalizeAngle()

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

Нормализовать угол.

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

Аргументы
[out]angle- Исходный угол, который требуется нормализовать.
[in]angleEpsilon- Погрешность угла.

◆ AngleBetweenVectors()

template<class Type >
double c3d::AngleBetweenVectors ( const Type &  v1,
const Type &  v2 
)

Вычислить угол между двумя векторами.

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

Аргументы
[in]v1- Вектор 1.
[in]v2- Вектор 2.
Возвращает
Величину угла.

◆ ArFind()

template<class Vector >
bool c3d::ArFind ( const Vector &  arParam,
double  t,
ptrdiff_t &  id 
)
inline

Найти параметр в массиве.

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

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

◆ InRange()

bool c3d::InRange ( double  x1,
double  x2,
double  x 
)
inline

Лежит ли число в интервале [x1, x2].

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

Аргументы
[in]x1- Начало или конец исходного интервала.
[in]x2- Начало или конец исходного интервала.
[in]x- Исходное число, которое надо проверить.
Возвращает
true, если x лежит внутри интервала,
иначе false.

◆ IsParamOn()

bool c3d::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.

◆ InRangePlus()

bool c3d::InRangePlus ( double  x1,
double  x,
double  eps = FLT_EPSILON 
)
inline

Лежит ли число в диапазоне [0, x1).

x1 >= 0

Аргументы
[in]x1- Конец исходного интервала.
[in]x- Исходное число, которое надо проверить.
[in]eps- Точность.
Возвращает
true, если x лежит внутри интервала,
иначе false.

◆ IsMonotonic()

template<class TypeVector >
bool c3d::IsMonotonic ( const TypeVector &  items,
bool  isAscending,
bool  allowEqual = false 
)

Нормализован ли массив объектов по возрастанию или убыванию.

Нормализован ли массив объектов по возрастанию или убыванию.

Аргументы
[in]items- Одномерный массив объектов.
[in]isAscending- Проверять на возрастание.
[in]allowEqual- Допускать равенство объектов.
Возвращает
true, если массив объектов отсортировано по возрастанию (убыванию),
иначе false

◆ ArePointsOnLine() [1/2]

template<class Point , class Vector >
bool c3d::ArePointsOnLine ( const SArray< Point > &  pnts,
double  metricEps = METRIC_EPSILON 
)

Лежат ли точки на линии.

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

Аргументы
[in]pnts- Набор точек.
[in]metricEps- Точность проверки.
Возвращает
true, если точки лежат на линии,
иначе false

◆ ArePointsOnLine() [2/2]

template<class Point , class Vector >
bool c3d::ArePointsOnLine ( const std::vector< Point > &  pnts,
double  metricEps = METRIC_EPSILON 
)

Лежат ли точки на линии.

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

Аргументы
[in]pnts- Набор точек.
[in]metricEps- Точность проверки.
Возвращает
true, если точки лежат на линии,
иначе false

◆ IsPlanar()

template<class PointsVector >
bool c3d::IsPlanar ( const PointsVector &  pnts,
MbPlacement3D place,
double  mEps = METRIC_EPSILON 
)

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

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

Аргументы
[in]pnts- Набор точек.
[in,out]place- Система координат, в которой лежат точки.
[in]mEps- Точность проверки.
Возвращает
true, если точки лежат на плоскости,
иначе false

◆ IsPlanar2()

template<class Point >
bool c3d::IsPlanar2 ( const Array2< Point > &  pnts,
MbPlacement3D place,
double  mEps = METRIC_EPSILON 
)

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

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

Аргументы
[in]pnts- Набор точек.
[in,out]place- Система координат, в которой лежат точки.
[in]mEps- Точность проверки.
Возвращает
true, если точки лежат на плоскости,
иначе false

◆ SetLimitParam()

template<class DoubleVector >
void c3d::SetLimitParam ( DoubleVector tarr,
double  tmin,
double  tmax,
double  teps = Math::paramEpsilon 
)

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

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

Аргументы
[in,out]params- Множество параметров, упорядоченный по возрастанию параметра.
[in]pmin- Минимальное значение параметра.
[in]pmax- Максимальное значение параметра.

◆ SortSynchroArrays()

template<class DoubleParamsVector >
bool SortSynchroArrays ( DoubleParamsVector &  tt0,
DoubleParamsVector &  tt2,
double  eps,
bool  checkCoincidentParams 
)

Отсортировать массив.

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

Аргументы
[out]tt0- Исходный массив 1 параметров, который требуется отсортировать.
[out]tt2- Исходный массив 2 параметров, который требуется отсортировать синхронно с tt0.
[in]eps- Точность сравнения параметров.
[in]checkCoincidentParams- Флаг проверки на наличие совпадающих параметров.

◆ SortArray()

template<class DoubleParamsVector >
void SortArray ( DoubleParamsVector &  tt0,
double  eps,
bool  checkCoincidentParams 
)

Отсортировать массив.

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

Аргументы
[out]tt0- Исходный массив параметров, который требуется отсортировать.
[in]eps- Точность сравнения параметров.
[in]checkCoincidentParams- Флаг проверки на наличие совпадающих параметров.

◆ CorrectParameter()

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- Точность вычислений.

◆ CorrectCheckNearParameter()

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.

◆ MatrixRoughInverse()

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

◆ MatrixTextInverse()

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

◆ RoundedValue()

bool RoundedValue ( double &  value,
uint8  n 
)

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

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

Аргументы
[in,out]value- Округляемое число.
[in]n- Число значащих цифр.
Возвращает
true, если округление выполнено, иначе false.

◆ QuadraticEquation() [1/2]

int QuadraticEquation ( double  a,
double  b,
double  c,
double &  d,
std::pair< double, double > &  res 
)

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

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

Аргументы
[in]a- Коэффициент при квадрате неизвестной.
[in]b- Коэффициент при неизвестной.
[in]c- Коэффициент - константный член уравнения.
[out]d- Дискриминант уравнения.
[out]res- Корни уравнения.
Возвращает
Количество действительных решений и дискриминант уравнения.

◆ QuadraticEquation() [2/2]

int QuadraticEquation ( double  a,
double  b,
double  c,
double &  x1,
double &  x2,
double  epsilon = Math::paramEpsilon 
)

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

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

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

◆ QubicEquation()

int QubicEquation ( double  a,
double  b,
double  c,
double  d,
double *  x,
double  epsilon 
)

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

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

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

◆ CubicEquation()

int CubicEquation ( double  i1,
double  i2,
double  i3,
double *  x,
double  epsilon 
)

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

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

Аргументы
[in]i1- Коэффициент при квадрате неизвестной.
[in]i2- Коэффициент при неизвестной.
[in]i3- Коэффициент - константный член уравнения.
[out]x- Корни уравнения.
[in]epsilon- Погрешность нахождения решения.
Возвращает
Количество действительных решений.

◆ Degree4Equation()

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.

Решить уравнение четвертой степени вида 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- Погрешность нахождения решения.
Возвращает
Количество действительных решений.

◆ EigenVector()

void EigenVector ( double  a[c3d::SPACE_DIM][c3d::SPACE_DIM],
MbVector3D vect 
)

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

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

Аргументы
[in]a- Матрица 3 x 3.
[out]vect- Собственный вектор матрицы.

◆ EqualPoints()

template<class Point >
bool c3d::EqualPoints ( const Point &  p1,
const Point &  p2,
double  eps 
)

Проверить точки на равенство.

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

Аргументы
[in]p1- Первая декартова точка.
[in]p2- Вторая декартова точка.
[in]eps- Метрическая погрешность совпадения точек.
Возвращает
true, если точки совпадают,
иначе false.

◆ EqualVectors()

template<class Vector >
bool c3d::EqualVectors ( const Vector &  p1,
const Vector &  p2,
double  eps 
)

Проверить векторы на равенство с заданной точностью.

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

Аргументы
[in]p1- Первый вектор.
[in]p2- Второй вектор.
[in]eps- Погрешность координат.
Возвращает
Возвращает true, если векторы равны.

◆ EqualMatrices()

template<class Matrix >
bool c3d::EqualMatrices ( const Matrix &  m1,
const Matrix &  m2,
double  accuracy 
)

Сравнить матрицы.

Толерантное сравнение двух матриц.

Аргументы
[in]m1,m2- Исходные матрицы.
[in]accuracy- Толерантность.
Возвращает
true, если матрицы равны,
false в противном случае.

◆ GetCosSin()

void c3d::GetCosSin ( const double &  tt,
double &  cosT,
double &  sinT 
)
inline

Вычисление косинуса и синуса.

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

Аргументы
[in]tt- Угол (в радианах).
[out]cosT- Косинус угла tt.
[out]sinT- Синус угла tt.

◆ GetParamDistance()

template<class Type >
double GetParamDistance ( const Type &  p1,
const Type &  p2,
MbeSplineParamType  spType 
)

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

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

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

◆ IsValidNurbsParams() [1/3]

bool IsValidNurbsParams ( ptrdiff_t  degree,
bool  closed,
size_t  pcnt 
)
inline

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

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

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

◆ IsValidNurbsParams() [2/3]

bool IsValidNurbsParams ( ptrdiff_t  degree,
bool  closed,
size_t  pcnt,
size_t  wcnt 
)
inline

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

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

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

◆ IsValidNurbsParams() [3/3]

bool IsValidNurbsParams ( ptrdiff_t  degree,
bool  closed,
size_t  pcnt,
size_t  wcnt,
size_t  kcnt 
)
inline

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

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

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

◆ IsValidNurbsParamsExt() [1/2]

template<class KnotsVector >
bool IsValidNurbsParamsExt ( ptrdiff_t  degree,
bool  closed,
size_t  pcnt,
const KnotsVector &  knots 
)

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

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

Аргументы
[in]degree- Порядок B-сплайна.
[in]closed- Признак замкнутости.
[in]pcnt- Число точек.
[in]knots- Узловой вектор.
Возвращает
true, если параметры согласованы.

◆ IsValidNurbsParamsExt() [2/2]

template<class PointVector , class DoubleVector >
bool IsValidNurbsParamsExt ( ptrdiff_t  degree,
bool  closed,
const PointVector &  pnts,
const DoubleVector *  wts,
const DoubleVector *  knots = NULL 
)

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

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

Аргументы
[in]degree- Порядок B-сплайна.
[in]closed- Признак замкнутости.
[in]pnts- Точки.
[in]wts- Веса точек.
[in]knots- Узловой вектор.
Возвращает
true, если параметры согласованы.

◆ IsValidNurbsKnots()

template<class KnotsVector >
bool IsValidNurbsKnots ( const KnotsVector &  knots,
double  eps = EXTENT_EPSILON 
)

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

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

Аргументы
[in]knots- Узловой вектор.
Возвращает
true, если параметры согласованы.

◆ KnotIndex()

template<class KnotsVector >
ptrdiff_t KnotIndex ( ptrdiff_t  degree,
const KnotsVector &  knots,
double &  t 
)

Определение индекса узла left для первой ненулевой функции.

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

Аргументы
[in]degree- Порядок B-сплайна.
[in]knots- Множество узлов.
[in,out]t- Значение параметра.
Возвращает
Индекс узла.

◆ DefineKnotsVector() [1/2]

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- Узловой вектор.

◆ DefineKnotsVector() [2/2]

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, если набор параметров сформирован.

◆ DefineThroughPointsParams()

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, если набор параметров сформирован.

◆ BasisFuns()

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-сплайна)).

Вычисление 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, содержимое игнорируется и будет перезаписано. Нужен для ускорения работы функции. В результате работы в нем останется мусор..

◆ CalcBsplvb()

template<class DoubleVector >
bool CalcBsplvb ( const DoubleVector &  knots,
double  t,
ptrdiff_t  left,
ptrdiff_t  degree,
DoubleVector &  biatx,
DoubleVector &  lrVect 
)

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

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

◆ AllBasisFuns() [1/2]

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 кривых и поверхностей ).

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

◆ AllBasisFuns() [2/2]

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 кривых и поверхностей ).

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

◆ CalcDBsplvb()

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- Двумерный массив значений.

◆ CurveDeriveCpts() [1/5]

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 
)

Вычислить все разностные формы кривой.

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

◆ CurveDeriveCpts() [2/5]

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 
)

Вычислить все разностные формы кривой.

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

◆ CurveDeriveCpts() [3/5]

template<class Point , class NurbsVector , class KnotsVector , class DoubleTriple >
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,
DoubleTriple **  DT,
double **  WT 
)

Вычислить все разностные формы кривой.

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

◆ CurveDeriveCpts() [4/5]

template<class Point , class NurbsVector , class KnotsVector , class DoubleTriple >
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,
DoubleTriple **  DT,
double **  WT 
)

Вычислить все разностные формы кривой.

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

◆ CurveDeriveCpts() [5/5]

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 
)

Вычислить все разностные формы кривой.

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

◆ CheckParam()

void CheckParam ( const double &  tMin,
const double &  tMax,
bool  closed,
double &  t 
)
inline

Загнать параметр t в параметрическую область кривой.

Аргументы
[in]tMin,tMax- Параметры, задающие параметрическую область кривой.
[in]closed- Признак замкнутости кривой.
[in,out]t- Исходный параметр.

◆ CalculateSplines()

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-сплайна.

◆ Swap()

template<class Type >
void Swap ( Type *  arr,
size_t  ind1,
size_t  ind2 
)

Перестановка 2 элементов в массиве.

Переставляются заданные элементы массива.

Аргументы
[out]base- Указатель на массив.
[in]ind1- Индекс первого элемента.
[in]ind2- Индекс второго элемента.

◆ InsertSort()

template<class Type , class Type2 , class Type3 >
void InsertSort ( Type *  base,
size_t  num,
KsQSortCompFunc  compareFunc,
Type2 *  base2 = NULL,
Type3 *  base3 = NULL 
)

Сортировка массива с возможностью синхронной перестановки элементов в двух других массивах. Эффективна для небольших массивов.

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

Аргументы
[out]base- Указатель на первый массив, который требуется отсортировать.
[in]num- Количество элементов в массиве.
[in]compareFunc- Указатель на функцию сравнения элементов первого массива. Аналог функции strcmp, предоставляемый пользователем для сравнения элементов массива. Принимает 2 указателя на элементы и возвращает: отрицательное значение, если 1<2; 0, если 1=2; положительное значение, если 1>2.
[out]base2- Указатель на второй массив (может быть NULL).
[out]base3- Указатель на третий массив (может быть NULL).

◆ QuickSort()

template<class Type , class Type2 , class Type3 >
void QuickSort ( Type *  base,
size_t  num,
KsQSortCompFunc  compareFunc,
Type2 *  base2 = NULL,
Type3 *  base3 = NULL 
)

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

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

Аргументы
[out]base- Указатель на первый массив, который требуется отсортировать.
[in]num- Количество элементов в массиве.
[in]compareFunc- Указатель на функцию сравнения элементов первого массива. Аналог функции strcmp, предоставляемый пользователем для сравнения элементов массивы. Принимает 2 указателя на элементы и возвращает: отрицательное значение, если 1<2; 0, если 1=2, положительное значение, если 1>2.
[out]base2- Указатель на второй массив (может быть NULL).
[out]base3- Указатель на третий массив (может быть NULL).