00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef GENERATEUR_HPP
00023 #define GENERATEUR_HPP
00024 #include "Image.hpp"
00025 #include "GPointInitialisation.hpp"
00026 #include "GFractale.hpp"
00027 #include "GAccumulateur.hpp"
00035 namespace Fractale
00036 {
00046 template<typename T,typename T2,typename T3>
00047 Image<unsigned int> Generateur
00048 (
00049 T t,
00050 T2 t2,
00051 T3 t3,
00052 zone zoneImage
00053 )
00054 {
00055 GPointInitialisation & in(t);
00056 GFractale &fractale(t2);
00057 GAccumulateur& accumulateur(t3);
00058
00059 in.m_zone = zoneImage;
00060 accumulateur.m_zone = zoneImage;
00061
00062 in.debut();
00063
00064 Image<unsigned int> resultat(zoneImage.imgH,zoneImage.imgL);
00065 while(!in.fin())
00066 {
00067 point z = in.nouveauPoint();
00068
00069 const std::vector<point> & sequence = fractale.genererSequence(z);
00070 accumulateur.accumuler(resultat,z,sequence);
00071 }
00072 std::cout << std::endl;
00073 return resultat;
00074
00075 }
00076
00077
00087 template<typename T>
00088 Image<unsigned int> TracerCourbe
00089 (
00090 T t,
00091 unsigned int nbLoop,
00092 point z,
00093 zone zoneImage
00094 )
00095 {
00096 GFractale &fractale(t);
00097 AccumulerSurLaSequence accumulateur;
00098
00099 accumulateur.m_zone = zoneImage;
00100
00101
00102
00103 Image<unsigned int> resultat(zoneImage.imgH,zoneImage.imgL);
00104 for(unsigned int i =0; i <nbLoop;++i)
00105 {
00106 std::cout << std::setprecision(2) << std::fixed << std::setw(5) << std::left << (100.* i) / nbLoop << " % \r" << std::flush;
00107
00108 const std::vector<point> & sequence = fractale.genererSequence(z);
00109 accumulateur.accumuler(resultat,z,sequence);
00110 z = fractale.suivant(*sequence.rbegin());
00111 }
00112 std::cout << std::endl;
00113 return resultat;
00114
00115 }
00116
00117 }
00118 #endif