diff --git a/apps/probability/law/binomial_law.cpp b/apps/probability/law/binomial_law.cpp index 6bb06893d..6b6ae2c5a 100644 --- a/apps/probability/law/binomial_law.cpp +++ b/apps/probability/law/binomial_law.cpp @@ -83,4 +83,18 @@ float BinomialLaw::evaluateAtAbscissa(float x) const { return expf(lResult); } +bool BinomialLaw::authorizedValueAtIndex(float x, int index) const { + if (index == 0) { + if (x != (int)x) { + return false; + } + return true; + } + if (x < 0.0f || x > 1.0f) { + return false; + } + return true; +} + + } diff --git a/apps/probability/law/binomial_law.h b/apps/probability/law/binomial_law.h index 149eef423..38d20316b 100644 --- a/apps/probability/law/binomial_law.h +++ b/apps/probability/law/binomial_law.h @@ -19,6 +19,7 @@ public: const char * parameterNameAtIndex(int index) override; const char * parameterDefinitionAtIndex(int index) override; float evaluateAtAbscissa(float x) const override; + bool authorizedValueAtIndex(float x, int index) const override; }; } diff --git a/apps/probability/law/exponential_law.cpp b/apps/probability/law/exponential_law.cpp index 6ace5a88b..e05736cc7 100644 --- a/apps/probability/law/exponential_law.cpp +++ b/apps/probability/law/exponential_law.cpp @@ -55,4 +55,11 @@ float ExponentialLaw::evaluateAtAbscissa(float x) const { return m_parameter1*expf(-m_parameter1*x); } +bool ExponentialLaw::authorizedValueAtIndex(float x, int index) const { + if (x <= 0.0f) { + return false; + } + return true; +} + } diff --git a/apps/probability/law/exponential_law.h b/apps/probability/law/exponential_law.h index 61d672368..9badd75f2 100644 --- a/apps/probability/law/exponential_law.h +++ b/apps/probability/law/exponential_law.h @@ -19,6 +19,7 @@ public: const char * parameterNameAtIndex(int index) override; const char * parameterDefinitionAtIndex(int index) override; float evaluateAtAbscissa(float x) const override; + bool authorizedValueAtIndex(float x, int index) const override; }; } diff --git a/apps/probability/law/law.h b/apps/probability/law/law.h index 497b7ad6f..4bdaa6bbb 100644 --- a/apps/probability/law/law.h +++ b/apps/probability/law/law.h @@ -29,6 +29,7 @@ public: virtual const char * parameterDefinitionAtIndex(int index) = 0; virtual void setParameterAtIndex(float f, int index) = 0; virtual float evaluateAtAbscissa(float x) const = 0; + virtual bool authorizedValueAtIndex(float x, int index) const = 0; protected: constexpr static float k_minNumberOfXGridUnits = 7.0f; constexpr static float k_maxNumberOfXGridUnits = 18.0f; diff --git a/apps/probability/law/normal_law.cpp b/apps/probability/law/normal_law.cpp index ae6dfabcb..e93bd9254 100644 --- a/apps/probability/law/normal_law.cpp +++ b/apps/probability/law/normal_law.cpp @@ -78,4 +78,8 @@ float NormalLaw::evaluateAtAbscissa(float x) const { return (1.0f/(fabsf(m_parameter2)*sqrtf(2.0f*M_PI)))*expf(-0.5f*powf((x-m_parameter1)/m_parameter2,2)); } +bool NormalLaw::authorizedValueAtIndex(float x, int index) const { + return true; +} + } diff --git a/apps/probability/law/normal_law.h b/apps/probability/law/normal_law.h index 2456e45dd..f87f4a4a5 100644 --- a/apps/probability/law/normal_law.h +++ b/apps/probability/law/normal_law.h @@ -19,6 +19,7 @@ public: const char * parameterNameAtIndex(int index) override; const char * parameterDefinitionAtIndex(int index) override; float evaluateAtAbscissa(float x) const override; + bool authorizedValueAtIndex(float x, int index) const override; }; } diff --git a/apps/probability/law/poisson_law.cpp b/apps/probability/law/poisson_law.cpp index b0574555f..b53ce2cdf 100644 --- a/apps/probability/law/poisson_law.cpp +++ b/apps/probability/law/poisson_law.cpp @@ -58,4 +58,11 @@ float PoissonLaw::evaluateAtAbscissa(float x) const { return expf(lResult); } +bool PoissonLaw::authorizedValueAtIndex(float x, int index) const { + if (x <= 0.0f) { + return false; + } + return true; +} + } diff --git a/apps/probability/law/poisson_law.h b/apps/probability/law/poisson_law.h index 2f6010432..206fe6e1c 100644 --- a/apps/probability/law/poisson_law.h +++ b/apps/probability/law/poisson_law.h @@ -19,6 +19,7 @@ public: const char * parameterNameAtIndex(int index) override; const char * parameterDefinitionAtIndex(int index) override; float evaluateAtAbscissa(float x) const override; + bool authorizedValueAtIndex(float x, int index) const override; }; } diff --git a/apps/probability/law/uniform_law.cpp b/apps/probability/law/uniform_law.cpp index 0945c65e7..1037c188a 100644 --- a/apps/probability/law/uniform_law.cpp +++ b/apps/probability/law/uniform_law.cpp @@ -62,4 +62,17 @@ float UniformLaw::evaluateAtAbscissa(float t) const { return 0.0f; } +bool UniformLaw::authorizedValueAtIndex(float x, int index) const { + if (index == 0) { + if (x > m_parameter2) { + return false; + } + return true; + } + if (m_parameter1 > x) { + return false; + } + return true; +} + } diff --git a/apps/probability/law/uniform_law.h b/apps/probability/law/uniform_law.h index 52a615694..d610c58dc 100644 --- a/apps/probability/law/uniform_law.h +++ b/apps/probability/law/uniform_law.h @@ -19,6 +19,7 @@ public: const char * parameterNameAtIndex(int index) override; const char * parameterDefinitionAtIndex(int index) override; float evaluateAtAbscissa(float x) const override; + bool authorizedValueAtIndex(float x, int index) const override; }; } diff --git a/apps/probability/parameters_controller.cpp b/apps/probability/parameters_controller.cpp index 80bcc4397..c1d14226a 100644 --- a/apps/probability/parameters_controller.cpp +++ b/apps/probability/parameters_controller.cpp @@ -178,6 +178,10 @@ float ParametersController::parameterAtIndex(int index) { } void ParametersController::setParameterAtIndex(int parameterIndex, float f) { + if (!m_law->authorizedValueAtIndex(f, parameterIndex)) { + app()->displayWarning("Cette valeur est interdite !"); + return; + } m_law->setParameterAtIndex(f, parameterIndex); }