.. _program_listing_file_include_gwmodelpp_spatialweight_CRSSTDistance.h: Program Listing for File CRSSTDistance.h ======================================== |exhale_lsh| :ref:`Return to documentation for file ` (``include/gwmodelpp/spatialweight/CRSSTDistance.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef CRSSTDISTANCE_H #define CRSSTDISTANCE_H #include "CRSDistance.h" #include "OneDimDistance.h" #include namespace gwm { class CRSSTDistance : public Distance { public: typedef arma::vec (*CalculatorType)(Distance*, gwm::OneDimDistance*, arma::uword, double, double); static arma::vec OrthogonalSTDistance(Distance* spatial, gwm::OneDimDistance* temporal, arma::uword focus, double lambda, double angle); static arma::vec ObliqueSTDistance(Distance* spatial, gwm::OneDimDistance* temporal, arma::uword focus, double lambda, double angle); public: CRSSTDistance(); explicit CRSSTDistance(Distance* spatialDistance, gwm::OneDimDistance* temporalDistance, double lambda); explicit CRSSTDistance(Distance* spatialDistance, gwm::OneDimDistance* temporalDistance, double lambda, double angle); CRSSTDistance(const CRSSTDistance& distance); Distance * clone() const override { return new CRSSTDistance(*this); } DistanceType type() override { return DistanceType::CRSSTDistance; } void makeParameter(std::initializer_list plist) override; arma::vec distance(arma::uword focus) override { return mCalculator(mSpatialDistance, mTemporalDistance, focus, mLambda, mAngle); } double minDistance() override; double maxDistance() override; public: //const gwm::CRSDistance* spatialDistance() const { return mSpatialDistance; } const Distance* spatialDistance() const { return mSpatialDistance; } const gwm::OneDimDistance* temporalDistance() const { return mTemporalDistance; } // unused code to set lambda const double lambda(){ return mLambda; } void setLambda(const double lambda) { if (lambda >= 0 && lambda <= 1) { mLambda = lambda; } else throw std::runtime_error("The lambda must be in [0,1]."); } const double angle() { return mAngle; } void setAngle(const double angle) { mAngle = angle; } protected: Distance* mSpatialDistance = nullptr; gwm::OneDimDistance* mTemporalDistance = nullptr; double mLambda = 0.0; double mAngle = arma::datum::pi / 2; private: std::unique_ptr mParameter; CalculatorType mCalculator = &OrthogonalSTDistance; }; } #endif // CRSSTDISTANCE_H