Files
Extern/C3d/Include/func_sinus_function.h
SaraP 4be7d59035 Extern :
- C3d aggiornamento delle librerie ( 117910).
2022-08-09 08:56:28 +02:00

108 lines
7.6 KiB
C++

////////////////////////////////////////////////////////////////////////////////
/**
\file
\brief \ru Синус функция.
\en Sinus function. \~
*/
////////////////////////////////////////////////////////////////////////////////
#ifndef __FUNC_SINUS_FUNCTION_H
#define __FUNC_SINUS_FUNCTION_H
#include <function.h>
//------------------------------------------------------------------------------
/** \brief \ru Синус функция.
\en Sinus function. \~
\details \ru Синус функция f(t) = origin + amplitude* sin((t - shift) / frequency). \n
\en Sinus function f(t) = origin + amplitude* sin((t - shift) / frequency). \n \~
\ingroup Functions
*/
// ---
class MATH_CLASS MbSinusFunction : public MbFunction {
public :
double origin; ///< \ru Начальное значение. \en Start value.
double amplitude; ///< \ru Амплитуда. \en Amplitude.
double shift; ///< \ru Сдвиг параметра. \en Parameter shift.
double frequency; ///< \ru Циклическая частота. \en Frequency.
double tmin; ///< \ru Начало области определения. \en Beginning of domain.
double tmax; ///< \ru Конец области определения. \en Ending of domain.
public :
///< \ru Конструктор по значениям и параметрам. \en Constructor by values and parameters.
MbSinusFunction( double orig, double ampl, double shif, double freq, double t1, double t2 );
private:
MbSinusFunction( const MbSinusFunction & );
public :
virtual ~MbSinusFunction();
public:
void Init( double orig, double ampl, double shif, double freq, double t1, double t2 ); ///< \ru Инициализация по значениям и параметрам. \en Initialization by values and parameters.
public:
// \ru Общие функции математического объекта \en Common functions of mathematical object
MbeFunctionType IsA() const override; // \ru Тип элемента \en A type of element
MbFunction & Duplicate() const override; // \ru Сделать копию элемента \en Create a copy of the element
bool IsSame ( const MbFunction & other, double accuracy = LENGTH_EPSILON ) const override; // \ru Являются ли объекты равными \en Determine whether objects are equal
bool SetEqual ( const MbFunction & ) override; // \ru Сделать равным \en Make equal
void GetProperties( MbProperties & ) override; // \ru Выдать свойства объекта \en Get properties of the object
void SetProperties( const MbProperties & ) override; // \ru Записать свойства объекта \en Set properties of the object
double GetTMax() const override; // \ru Вернуть максимальное значение параметра \en Get the maximum value of parameter
double GetTMin() const override; // \ru Вернуть минимальное значение параметра \en Get the minimum value of parameter
bool IsClosed() const override; // \ru Замкнутость кривой \en A curve closeness
void SetClosed( bool cl ) override; // \ru Замкнутость функции \en A function closeness
double Value ( double & t ) const override; // \ru Значение функции для t \en The value of function for a given t
double FirstDer ( double & t ) const override; // \ru Первая производная по t \en The first derivative with respect to t
double SecondDer ( double & t ) const override; // \ru Вторая производная по t \en The second derivative with respect to t
double ThirdDer ( double & t ) const override; // \ru Третья производная по t \en The third derivative with respect to t
double _Value ( double t ) const override; // \ru Значение функции для t \en The value of function for a given t
double _FirstDer ( double t ) const override; // \ru Первая производная по t \en The first derivative with respect to t
double _SecondDer ( double t ) const override; // \ru Вторая производная по t \en The second derivative with respect to t
double _ThirdDer ( double t ) const override; // \ru Третья производная по t \en The third derivative with respect to t
// \ru Вычислить значение и производные. \en Calculate value and derivatives of object for given parameter. \~
void Explore( double & t, bool ext,
double & val, double & fir, double * sec, double * thr ) const override;
void Inverse( MbRegTransform * iReg = nullptr ) override; // \ru Изменить направление \en Change direction
double Step( double t, double sag ) const override;
double DeviationStep( double t, double angle ) const override;
double MinValue ( double & t ) const override; // \ru Минимальное значение функции \en The minimum value of function
double MaxValue ( double & t ) const override; // \ru Максимальное значение функции \en The maximum value of function
double MidValue () const override; // \ru Среднее значение функции \en The middle value of function
bool IsGood () const override; // \ru Корректность функции \en Correctness of function
bool IsConst() const override;
bool IsLine () const override;
// \ru Создать функцию из части функции между параметрами t1 и t2 c выбором направления sense. \en Create a function in part of the function between the parameters t1 and t2 choosing the direction.
MbFunction * Trimmed( double t1, double t2, int sense ) const override;
// \ru Разбить функцию точкой с параметром t и вернуть отрезанную часть. \en Function break by the parameter t, and cut off part of the function: begs == true - save the initial half, beg == false - save the final half.
MbFunction * BreakFunction( double t, bool beg ) override;
void SetOffsetFunc( double off, double scale ) override; // \ru Сместить функцию \en Shift a function
bool SetLimit( double newTMin, double newTMax ); // \ru Установить область изменения параметра \en Set range of parameter
void SetLimitValue( size_t n, double newValue ) override; // \ru Установить значение на конце ( 1 - в начале, 2 - в конце) \en Set the value at the end (1 - at beginning, 2 - at ending)
double GetLimitValue( size_t n ) const override; // \ru Дать значение на конце ( 1 - в начале, 2 - в конце) \en Get the value at the end (1 - at beginning, 2 - at ending)
double GetOrigin() const { return origin; } ///< \ru Выдать начальное значение. \en Get start value.
void SetOrigin( double p ) { origin = p; } ///< \ru Изменить начальное значение. \en Set start value.
double GetAmplitude() const { return amplitude; } ///< \ru Выдать амплитуду. \en Get amplitude.
void SetAmplitude( double a ) { amplitude = a; } ///< \ru Изменить амплитуду. \en Set amplitude.
private:
void operator = ( const MbSinusFunction & ); // \ru Не реализовано \en Not implemented
DECLARE_PERSISTENT_CLASS_NEW_DEL( MbSinusFunction )
};
IMPL_PERSISTENT_OPS( MbSinusFunction )
#endif // __FUNC_SINUS_FUNCTION_H