//--------------------------------------------------------------------------- #ifndef fclassesH #define fclassesH #define FUNCS_IN_RULE 3 #define MAX_RULES_NUM 3000 #define MAX_AZIMUTH_FUNC_NUM 3000 #define MAX_ALTITUDE_FUNC_NUM 3000 #define MAX_FUNC_NUM 400 typedef struct { double in; double out; }DataValue; typedef struct { double in1; double in2; double out; }TwoDimDataValue; typedef struct { double in1; double in2; double in3; double out; }ThreeDimDataValue; class MembershipFunction { private: double from; double to; double max1; double max2; public: char name[12]; /* the name of the function */ MembershipFunction(double from,double max1,double max2,double to,char *name); double calculate(double value); }; class FuzzyRule { private: MembershipFunction *func1,*func2,*func3; public: double value; double calculate(double value1,double value2,double value3); FuzzyRule(MembershipFunction *func1,MembershipFunction *func2,MembershipFunction *func3,double value); }; //--------------------------------------------------------------------------- class FuzzyModelBody { private: MembershipFunction *AzimuthFunctions[MAX_AZIMUTH_FUNC_NUM]; MembershipFunction *AltitudeFunctions[MAX_ALTITUDE_FUNC_NUM]; FuzzyRule *RulesX[MAX_RULES_NUM]; FuzzyRule *RulesY[MAX_RULES_NUM]; public: int CreateMembershipFunctions(char *datafile); double CalcRulesX(double altitude,double azimuth); double CalcRulesY(double altitude,double azimuth); ~FuzzyModelBody(); }; //--------------------------------------------------------------------------- class OneDimModel { private: MembershipFunction *MembershipFunctions[MAX_FUNC_NUM]; FuzzyRule *Rules[MAX_RULES_NUM]; public: int CreateMembershipFunctions(char *DataFileName); double CalcRules(double parameter); ~OneDimModel(); }; //--------------------------------------------------------------------------- class TwoDimModel { private: MembershipFunction *MembershipFunctions1[MAX_FUNC_NUM]; MembershipFunction *MembershipFunctions2[MAX_FUNC_NUM]; FuzzyRule *Rules[MAX_RULES_NUM]; public: int CreateMembershipFunctions(char *DataFileName); double CalcRules(double parameter1,double parameter2); ~TwoDimModel(); }; //--------------------------------------------------------------------------- class ThreeDimModel { private: MembershipFunction *MembershipFunctions[MAX_FUNC_NUM]; FuzzyRule *Rules[MAX_RULES_NUM]; MembershipFunction *FindMembershipFunction(char *function_name); public: int LoadMembershipFunctions(char *filename); int LoadRules(char *filename); double CalculateRules(double value1, double value2, double value3); ~ThreeDimModel(); }; //--------------------------------------------------------------------------- #endif