Files
Extern/C3d/Include/mb_dim_accuracy.h
SaraP 79f60faa19 Extern :
- C3d aggiornamento delle librerie ( 117978).
2024-03-11 15:03:33 +01:00

129 lines
7.5 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
////////////////////////////////////////////////////////////////////////////////
/**
\file
\brief \ru N-мерная точность.
\en N-dimensional accuracy. \~
*/
////////////////////////////////////////////////////////////////////////////////
#ifndef __MB_DIM_ACCURACY_H
#define __MB_DIM_ACCURACY_H
#include <math_define.h>
#include <mb_variables.h>
//------------------------------------------------------------------------------
/** \brief \ru N-мерная точность.
\en N-dimensional accuracy. \~
\details \ru N-мерная точность задается N положительными числами.
Наиболее востребованы двумерная и трехмерная точности.
Компоненты точности в этих случаях соответствуют точностям вдоль осей x, y и z.
Двумерная точность может использоваться, например, при выполнении операций над
двумерными кривыми MbCurve. В этом случае компоненты точности будут рассчитываться
с использованием методов GetUEpsilon() и GetVEpsilon(), вызванных для
поверхности (MbSurface) на которой лежит данная кривая.
\en N-dimensional accuracy is specified by N positive numbers.
Two-dimensional and three-dimensional accuracies are the most demanded.
Components of accuracy in these cases correspond to accuracies along x, y and z axes.
Two-dimensional precision can be used, for example, when performing operations on two-dimensional MbCurve curves.
In this case, the accuracy components will be calculated using
the GetUEpsilon() and GetVEpsilon() methods called
for the surface (MbSurface) on which the curve lies. \~
\ingroup Legend
\warning \ru В разработке. \en Under development.
*/
// ---
class MATH_CLASS MbDimAccuracy
{
private :
c3d::DoubleVector _epsilon; ///< \ru Вектор N-мерной точности. \en N-dimensional accuracy vector.
public :
/// \ru Двумерная точность по умолчанию - ( PARAM_EPSILON, PARAM_EPSILON ) \en Default two-dimensional accuracy - ( PARAM_EPSILON, PARAM_EPSILON )
static const MbDimAccuracy twoDimAcc;
/// \ru Двумерная точность по умолчанию - ( METRIC_REGION, METRIC_REGION ) \en Default two-dimensional accuracy - ( METRIC_REGION, METRIC_REGION )
static const MbDimAccuracy twoDimRgn;
/// \ru Трехмерная точность по умолчанию - ( METRIC_EPSILON, METRIC_EPSILON, METRIC_EPSILON ) \en Default three-dimensional accuracy - ( METRIC_EPSILON, METRIC_EPSILON, METRIC_EPSILON )
static const MbDimAccuracy threeDimAcc;
public :
/** \brief \ru Конструктор для двумерной точности по двум значениям.
\en Constructor for two-dimensional accuracy on the three values. \~
\details \ru Конструктор для двумерной точности по двум значениям.
Если передаваемые компоненты точности меньше, чем 'DOUBLE_EPSILON',
то этим значениям присваивается 'DOUBLE_EPSILON'.
\en Constructor for two-dimensional accuracy on two values.
If the passed accuracy components are smaller than the 'DOUBLE_EPSILON',
then the value of 'DOUBLE_EPSILON' is assigned to these components.
\param[in] xEps - \ru Точность по оси x.
\en x-axis accuracy. \~
\param[in] yEps - \ru Точность по оси y.
\en y-axis accuracy. \~
*/
MbDimAccuracy( double xEps, double yEps );
/** \brief \ru Конструктор для трехмерной точности по трем значениям.
\en Constructor for two-dimensional accuracy on the three values. \~
\details \ru Конструктор для трехмерной точности по трем значениям.
Если передаваемые компоненты точности меньше, чем 'DOUBLE_EPSILON',
то этим значениям присваивается 'DOUBLE_EPSILON'.
\en Constructor for three-dimensional accuracy on three values.
If the passed accuracy components are smaller than the 'DOUBLE_EPSILON',
then the value of 'DOUBLE_EPSILON' is assigned to these components.
\param[in] xEps - \ru Точность по оси x.
\en x-axis accuracy. \~
\param[in] yEps - \ru Точность по оси y.
\en y-axis accuracy. \~
\param[in] zEps - \ru Точность по оси z.
\en z-axis accuracy. \~
*/
MbDimAccuracy( double xEps, double yEps, double zEps );
/** \brief \ru Конструктор N-мерной точности по вектору значений.
\en Constructor of N-dimensional accuracy on a vector of values. \~
\details \ru Конструктор N-мерной точности по вектору значений.
Если вектор пустой, то создаётся одномерная точность c компонентой равной 'DOUBLE_EPSILON'.
\en Constructor of N-dimensional accuracy on a vector of values.
If the vector is empty, a one-dimensional accuracy with component equal to 'DOUBLE_EPSILON' is returned. \~
\param[in] vector - \ru Вектор с компонентами N-мерной точности
\en Vector with components of N-dimensional accuracy. \~
*/
template <class Vector>
MbDimAccuracy( const Vector & vector );
/// \ru Конструктор копирования. \en The copy constructor.
explicit MbDimAccuracy( const MbDimAccuracy & acc ) : _epsilon( acc.GetEpsilon() ) {}
/// \ru Конструктор по умолчанию удалён. \en Default constructor explicitly deleted.
MbDimAccuracy() = delete;
/// \ru Деструктор. \en Destructor.
~MbDimAccuracy() {}
public: // Общие методы
size_t GetDimension() const { return _epsilon.size(); } ///< \ru Дать размерность точности. \en Get the accuracy dimension.
/// \ru Дать вектор с компонентами точности. \en Get a vector with accuracy components.
const c3d::DoubleVector & GetEpsilon() const { return _epsilon; }
/// \ru Вернуть значение минимальной компоненты точности. \en Return the value of the minimum accuracy component.
double GetMin() const;
/// \ru Длина вектора, построенного на компонентах точности. \en Length of the vector built on accuracy components.
double GetLength() const;
/// \ru Доступ к компоненте точности по индексу. \en Access to accuracy component by index.
double & operator [] ( size_t i );
/// \ru Значение компоненты точности по индексу. \en The value of accuracy component by index.
double operator [] ( size_t i ) const;
/// \ru Присвоить точности значение другой точности. \en Assign the value of another accuracy to the accuracy.
MbDimAccuracy & operator = ( const MbDimAccuracy & );
};
#endif // __MB_DIM_ACCURACY_H