00001 // ---------------------------------------------------------------------------- 00002 // 00003 // $Id$ 00004 // 00005 // Copyright 2008, 2009, 2010, 2011, 2012 Antonio Franchi and Paolo Stegagno 00006 // 00007 // This file is part of MIP. 00008 // 00009 // MIP is free software: you can redistribute it and/or modify 00010 // it under the terms of the GNU General Public License as published by 00011 // the Free Software Foundation, either version 3 of the License, or 00012 // (at your option) any later version. 00013 // 00014 // MIP is distributed in the hope that it will be useful, 00015 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 // GNU General Public License for more details. 00018 // 00019 // You should have received a copy of the GNU General Public License 00020 // along with MIP. If not, see <http://www.gnu.org/licenses/>. 00021 // 00022 // Contact info: antonio.franchi@tuebingen.mpg.de stegagno@diag.uniroma1.it 00023 // 00024 // ---------------------------------------------------------------------------- 00025 00026 00030 00031 00032 #ifndef __OBS_AVOI_ALGO_PFM_H 00033 #define __OBS_AVOI_ALGO_PFM_H 00034 00035 #include <ObsAvoiAlgo.h> 00036 00037 namespace MipAlgorithms{ 00038 00040 /* @{ */ 00041 00042 00043 00047 class ObsAvoiAlgoParPFM : public ObsAvoiAlgoPar { 00048 00049 public: 00050 00052 Decimal Kv; 00054 Decimal Kw; 00056 Decimal Kwe; 00058 Decimal outOfAxisDist; 00060 Decimal repDist; 00062 Decimal vortDist; 00064 Decimal Kr; 00066 Decimal Krv; 00067 00069 ObsAvoiAlgoParPFM(){ 00070 Kv = 0.3; 00071 Kw = 0.8; 00072 Kwe = 0.3; 00073 outOfAxisDist = 0.01; 00074 vortDist = 0.1; 00075 repDist = 0.2; 00076 Kr = 0.0002; 00077 Krv = 0.00004; 00078 } 00079 00089 ObsAvoiAlgoParPFM(Decimal KvP, Decimal KwP, Decimal KweP, Decimal outOfAxisDistP, Decimal repDistP, Decimal vortDistP, Decimal KrP, Decimal KrvP){ 00090 Kv = KvP; 00091 Kw = KwP; 00092 Kwe = KweP; 00093 outOfAxisDist = outOfAxisDistP; 00094 vortDist = vortDistP; 00095 repDist = repDistP; 00096 Kr = KrP; 00097 Krv = KrvP; 00098 } 00099 00101 ObsAvoiAlgoParPFM(const ObsAvoiAlgoParPFM &A){ 00102 Kv = A.Kv; 00103 Kw = A.Kw; 00104 Kwe = A.Kwe; 00105 outOfAxisDist = A.outOfAxisDist; 00106 vortDist = A.vortDist; 00107 repDist = A.repDist; 00108 Kr = A.Kr; 00109 Krv = A.Krv; 00110 } 00111 00113 ObsAvoiAlgoParPFM operator= (ObsAvoiAlgoParPFM A){ 00114 Kv = A.Kv; 00115 Kw = A.Kw; 00116 Kwe = A.Kwe; 00117 outOfAxisDist = A.outOfAxisDist; 00118 vortDist = A.vortDist; 00119 repDist = A.repDist; 00120 Kr = A.Kr; 00121 Krv = A.Krv; 00122 } 00123 00124 }; 00125 00126 00130 class ObsAvoiAlgoPFM : public ObsAvoiAlgo { 00131 00132 protected: 00133 00135 ObsAvoiAlgoParPFM par; 00136 00137 private: 00138 00140 Decimal Vr; 00142 Decimal Wr; 00144 Decimal Va; 00146 Decimal Wa; 00147 00151 void repulsiveControl(ObsAvoiAlgoIn &in); 00152 00156 void attractiveControl(ObsAvoiAlgoIn &in); 00157 00158 public: 00159 00161 ObsAvoiAlgoPFM(){ 00162 par = ObsAvoiAlgoParPFM(); 00163 } 00164 00167 ObsAvoiAlgoPFM(ObsAvoiAlgoParPFM OAP){ 00168 par = OAP; 00169 } 00170 00174 void getControl(ObsAvoiAlgoIn &in, ObsAvoiAlgoOut *out); 00175 00177 string getObjectName() const { 00178 return "ObsAvoiAlgoPFM"; 00179 } 00180 }; 00181 00182 00183 /* @} */ 00184 00185 }; // end namespace MipAlgorithms 00186 00187 #endif 00188 00189 00190 00191