00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef GACCUMULATEUR_HPP
00023 #define GACCUMULATEUR_HPP
00024 #include "Commun.hpp"
00032 namespace Fractale
00033 {
00034
00035
00043 struct GAccumulateur
00044 {
00045 zone m_zone;
00053 unsigned int toI(const point &z )
00054 {
00055 return static_cast<unsigned int>
00056 (
00057
00058 (m_zone.imgH - 1)
00059 *
00060 (z.imag() - m_zone.y)
00061 /
00062 m_zone.h
00063 );
00064 }
00071 unsigned int toJ(const point &z)
00072 {
00073 return static_cast<unsigned int>
00074 (
00075
00076 (m_zone.imgL - 1)
00077 *
00078 (z.real() - m_zone.x)
00079 /
00080 m_zone.l
00081 );
00082 }
00083
00091 virtual void accumuler(Image<unsigned int> &res, const point &pInit, const std::vector<point> &seq) = 0;
00092
00093 };
00094
00095
00099 struct AccumulerSurLaSequence : public GAccumulateur
00100 {
00101
00110 void accumuler(Image<unsigned int> &resultat, const point &pInit,const std::vector<point> & sequence)
00111 {
00112 std::vector<point>::const_iterator it = sequence.begin();
00113 std::vector<point>::const_iterator end = sequence.end();
00114 while (it != end)
00115 {
00116
00117 unsigned int i = toI(*it);
00118 unsigned int j = toJ(*it);
00119
00120 if(resultat.isValid(i,j))
00121 {
00122
00123 ++ resultat.pixel(i,j);
00124 }
00125
00126 ++it;
00127 }
00128 }
00129 };
00130
00131
00135 struct AccumulerSurOrigine : public GAccumulateur
00136 {
00137 void accumuler(Image<unsigned int> & resultat,const point & pInit,const std::vector<point> & sequence)
00138 {
00139 if(sequence.size() > 0 )
00140 {
00141
00142 unsigned int i = toI(pInit);
00143 unsigned int j = toJ(pInit);
00144
00145 if(resultat.isValid(i,j))
00146 {
00147
00148 resultat.pixel(i,j) += sequence.size() ;
00149 }
00150 }
00151 }
00152 };
00153 }
00154 #endif