00001 // Fuzzy.h 00002 ////////////////////////////////////////////////////////////////////// 00003 // (c) Copyright 2000-2002 Brown Deer Technology, LLC. 00004 // All rights reserved. 00005 ////////////////////////////////////////////////////////////////////// 00006 00007 #ifndef FUZZY_H 00008 #define FUZZY_H 00009 00010 #ifdef USE_STD 00011 #include <algorithm> 00012 #include <cmath> 00013 using namespace std; 00014 #else 00015 #include <algorithm.h> 00016 #include <math.h> 00017 #endif 00018 00019 class Fuzzy { 00020 public: 00021 Fuzzy(const float value) { assign(value); } 00022 Fuzzy() { Fuzzy(0); } 00023 virtual ~Fuzzy() {} 00024 Fuzzy& operator=( const float value ); 00025 operator float() { return _value; } 00026 operator bool() { return IsTrue(); } 00027 operator int() { return IsTrue(); } 00028 Fuzzy operator~(); 00029 Fuzzy operator&( Fuzzy& f); 00030 Fuzzy operator|( Fuzzy& f); 00031 Fuzzy operator^( Fuzzy& f); 00032 Fuzzy& operator&=( Fuzzy& f); 00033 Fuzzy& operator|=( Fuzzy& f); 00034 Fuzzy& operator^=( Fuzzy& f); 00035 virtual void assign( const float value ); 00036 virtual bool IsTrue() { return ( _value >= 0.5 ); } 00037 virtual bool IsFalse() { return ( _value < 0.5 ); } 00038 virtual bool IsAmbiguous() { return 0; } 00039 protected: 00040 float _value; 00041 }; 00042 00043 inline Fuzzy& Fuzzy::operator=( const float value ) 00044 { 00045 assign(value); 00046 return *this; 00047 } 00048 00049 inline Fuzzy Fuzzy::operator~() { 00050 Fuzzy ftmp; 00051 ftmp = 1.0 - float(*this); 00052 return ftmp; 00053 } 00054 00055 inline Fuzzy Fuzzy::operator&( Fuzzy& f) { 00056 Fuzzy ftmp; 00057 ftmp = min( float(*this), float(f) ); 00058 return ftmp; 00059 } 00060 00061 inline Fuzzy Fuzzy::operator|( Fuzzy& f) { 00062 Fuzzy ftmp; 00063 ftmp = max( float(*this), float(f) ); 00064 return ftmp; 00065 } 00066 00067 inline Fuzzy Fuzzy::operator^( Fuzzy& f) { 00068 Fuzzy ftmp; 00069 ftmp = fabs( float(*this) - float(f) ); 00070 return ftmp; 00071 } 00072 00073 inline Fuzzy& Fuzzy::operator&=( Fuzzy& f) { 00074 _value = min( _value, float(f) ); 00075 return *this; 00076 } 00077 00078 inline Fuzzy& Fuzzy::operator|=( Fuzzy& f) { 00079 _value = max( _value, float(f) ); 00080 return *this; 00081 } 00082 00083 inline Fuzzy& Fuzzy::operator^=( Fuzzy& f) { 00084 _value = fabs( _value - float(f) ); 00085 return *this; 00086 } 00087 00088 inline void Fuzzy::assign( const float value) { 00089 if ( value < 0 ) _value = 0; 00090 else if ( value > 1 ) _value = 1; 00091 else _value = value; 00092 } 00093 00094 #endif 00095
1.3.6