00001 //--------------------------------------------------------------------------- 00002 00003 #ifndef stolickaH 00004 #define stolickaH 00005 00006 //#include <math.h> 00007 #include "strom.h" 00008 #include "konvex.h" 00009 //--------------------------------------------------------------------------- 00010 00014 class stolicka 00015 { 00016 public: 00020 int cislo; 00021 00025 hodnoty_fitness hodn_fit; //hodnoty fitness za jednotlive kriteria 00026 00030 nastavenie_fitness nast; //navod, ako sa ma vyhodnocovat fitness funkcia tejto stolicky 00031 00035 bool stol; //ci ma byt navrchu polozena doska ako na stole 00036 00037 private: 00041 float fit; //fitness 00042 00043 //asi nanic 00044 float stabilita; //relativna stabilita stolicky 00045 00046 public: 00050 strom *posuny; 00051 00055 float mox,moz; //maximalna absolutna suradnica v smere osi x, z 00056 00060 float maxy; //maximalna y-ova suradnica v stolicke (najvyssi bod stolicky) 00061 00065 float miny; //minimalnay-ova suradnica stolicky (najnizsi bod stolicky) 00066 00070 float minz,maxz; 00071 00075 bool symetria; //ci ma byt stolicka symetricka (zrkadlovo podla roviny z-x) 00076 00080 bool symetria4; //symetria podla roviny x-z a x-y 00081 00085 int pocet_useciek; //pocet useciek v stolicke 00086 00087 private: 00091 int pocet_bodov; //pocet bodov celej stolicky 00092 00096 bod maxy_bod; //najvyssi bod stolicky 00097 00098 public: 00102 bod utvary[100][30]; //suradnice jedneho utvaru, t.j. jednej plochy alebo jednej ciary 00103 00107 int dlzky[100]; //dlzky zaznamov v poli utvary, ak je dlzky[i]<100, tak je to ciara 00108 // ak je dlzky[i]>100, tak je to rovina v dlzke dlzky[i]-100 00109 public: 00113 bod opor_body[100]; //oporne body - body, ktore su na zemi 00114 00118 int sedatka[100]; //index do pola utvary na riadky, v ktorych sa nachadza rovina, ktora je sedatkom 00119 00123 int pocet_sedatok; //pocet prvkov v poli sedatka; 00124 00125 public: 00129 int pocmin; //pocet opornych bodov = pocet bodov, ktore nie su vyssie ako 1 od najnizsieho bodu 00130 00131 private: 00135 bod zaciatok; 00136 00137 public: 00142 stolicka(int uhol); //vyrobi prazdnu stolicku 00143 00152 stolicka(nastavenie_fitness n, bool sym, bool sym4, bool doska); 00153 00158 ~stolicka(); 00159 00160 public: 00166 bod tazisko(); //tazisko celej stolicky 00167 00173 bod tazisko_roviny(int x); //tazisko roviny v utvary[x] 00174 00180 bod tazisko_opor_bodov(); //aritmeticky stred (priemer) opornych bodov 00181 00185 void vyrataj_body(); 00186 00192 void najdi_sedatka(); 00193 00200 float fitness_za_sedatka(); 00201 00207 void zniz_body(); //znizi 3(2) najnizise body na uroven najnizsieho z nich 00208 00214 void urob_symetriu(); //urobi stolicku symetrickou 00215 00221 void urob_4symetriu(); //urobi stolicku 4symetrickou 00222 00223 public: 00227 void mutuj(); 00228 00233 float fitness(); 00234 00239 prvok* daj_na_krizenie(); 00240 00245 void pridaj_pri_krizeni(prvok *uk); 00246 00251 bool je_sedatko(); 00252 00257 bool stabilna(); 00258 00263 stolicka* zduplikuj_sa(); 00264 00268 void vyrataj_oporne_body(); 00269 00275 int length(); 00276 00281 void uloz_do_suboru(AnsiString filename); 00282 00287 void nacitaj_zo_suboru(AnsiString filename); 00288 00292 void napln_nahodne(); 00293 00299 bool plocha_je_sedatko(int x); 00300 00301 }; 00302 00309 float vzdialenost_bodov_bez_y(bod b1, bod b2); 00310 00317 float vzdialenost_bodov(bod b1, bod b2); 00318 //dlazka je rovina x-z!!! 00319 #endif 00320