#pragma once #include "Defines.h" #include "mAlgPseudo_global.h" class iAlgPseuMethodCompInfo; class zxAlgRegress; // 组分拟压力计算载体,单例模式,在模型处理解释过程调用(属于用的部分) // 由iAlgPseuCaller进行调用 class M_ALGPSEUDO_EXPORT iAlgPseuConvertComp { public: iAlgPseuConvertComp(); static bool initPs(const VVecDouble& vvec, \ const QMap* pMap1, \ const QMap* pMap2); // 系统内部自动选用不同的方法 static bool calP(double ps, double &p, int which = -1); static bool calPS(double p, double &ps, int which = -1); private: /////////////////////////////////////////////////////////////////////////////////////////// // 拟合公式 // 计算“压力->拟压力”的回归曲线方程系数 // static bool fitPtoPS(bool isZero = true); // // 计算“拟压力->压力”的回归曲线方程系数 static bool fitPStoP(bool isZero = false); /////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // 压力->拟压力 static bool pToPs_PsCFitting(double p, double &ps); // 拟压力->压力 static bool psToP_PsCFitting(double ps, double &p); // 20220317 增加新的方式,直接根据数据进行判断,看谁离得最近,则选取谁 static bool pToPs_Simple(double p, double &ps); static bool psToP_Simple(double ps, double &p); static bool _simple_find_xy(VecDouble* pVecX, VecDouble* pVecY, double x, double &y); static double _linear_value_at(double x, double x1, double x2, double y1, double y2); //////////////////////////////////////////////////////////////////////////////// private: static QMap m_mapPsInfos; // 用压力算拟压力的系数 static VecDouble m_vecCoefsPtoPS; // 用拟压力算压力的系数 static VecDouble m_vecCoefsPStoP; // job里的三组数据 static VecDouble m_vecP; static VecDouble m_vecPs; // 这是为了方便调用,加快速度 static QMap m_mapAlgs; };