#ifndef _MATCHERS_H #define _MATCHERS_H #include #include /* Matchters */ #include "PatMatch.h" #include "BitmapFont.h" class MatchResult { friend ostream& operator<<(ostream &os,const MatchResult &mr); protected: int x,y; PatMatch pm; public: MatchResult(int xx, int yy,const PatMatch& p) :x(xx),y(yy),pm(p){} vector getPixels() const { return pm.getPixels(x,y); } }; class Matchers { friend ostream& operator<<(ostream &os,const Matchers &mt); protected: vector pm; public: Matchers(){ pm.push_back(PatMatch(3,3, "..." ".@@" "...", Assumption() .add(SimpleAssumption(YokoMask,Start,1,1,0,0)) .add(SimpleAssumption(HidariMask,End,1,1,180,0)))); pm.push_back(PatMatch(3,3, "..." "@@@" "...", Assumption() .add(SimpleAssumption(YokoMask,Mid,1,1,0,0)) .add(SimpleAssumption(HidariMask,Mid,1,1,180,1)))); pm.push_back(PatMatch(4,3, "...." "@@@@" ".@@.", Assumption() .add(SimpleAssumption(YokoMask,Mid,1.5,1,0,0)) .add(SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),JointStart,1.5,1,270,2)))); pm.push_back(PatMatch(5,3, ".@@.." "@@@@@" ".....", Assumption() .add(SimpleAssumption(YokoMask,Mid,1.5,1,0,0)) .add(SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),JointEnd,1.5,1,270,2)))); pm.push_back(PatMatch(5,4, "....?" ".@@.." "@@@@." ".....", SimpleAssumption(YokoMask,End,3,2,0,2))); pm.push_back(PatMatch(4,2, ".@@." ".@@.", SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),JointStart,1.5,1,270,2))); pm.push_back(PatMatch(4,3, ".@@." "@@@@" ".@@.", Assumption() .add(SimpleAssumption(YokoMask,Mid,1.5,1,0,0)) .add(SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),Mid,1.5,1,270,2)))); pm.push_back(PatMatch(4,4, "...?" ".@.." ".@@@" ".@@.", Assumption() .add(SimpleAssumption(YokoMask,JointStart,1.5,2,0,0)) .add(SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),JointStart,1.5,2,270,2)))); pm.push_back(PatMatch(4,4, ".@@." ".@@@" ".@@." "....", Assumption() .add(SimpleAssumption(YokoMask,JointStart,1.5,2,0,0)) .add(SimpleAssumption(TateMask,JointEnd,1.5,1,270,2)))); pm.push_back(PatMatch(4,4, ".@@." "@@@." ".@@." "....", Assumption() .add(SimpleAssumption(YokoMask,JointEnd,1.5,2,0,0)) .add(SimpleAssumption(TateMask,JointEnd,1.5,1,270,2)))); } vector findMatch(const BitmapFont& bf) const{ vector mr; vector::const_iterator it; for(it=pm.begin();it!=pm.end();it++) for(int y= -1; yisMatch(bf,x,y)) mr.push_back(MatchResult(x,y,*it)); return mr; } vector notCovered(const BitmapFont& bf) const{ vector mr=findMatch(bf); vector > pixel2match(bf.getSize()); vector > match2pixel(mr.size()); vector::iterator it; for(it=mr.begin();it!=mr.end();it++){ int n= it-mr.begin(); vector ps=(*it).getPixels(); vector::iterator ips; for(ips=ps.begin();ips!=ps.end();ips++){ int m=bf.getIndex(*ips); cout << '(' << ips->first << ',' << ips->second << ")\n"; assert(m != -1); match2pixel[n].insert(m); pixel2match[m].insert(n); } } vector ret; for(int i=0;i::const_iterator it; for(it=mt.pm.begin();it!=mt.pm.end();it++){ os << *it << ','; } os << ')'; return os; } ostream& operator<<(ostream &os,const MatchResult &mr){ os << "MatchResult(" << mr.x << "," << mr.y << "," << mr.pm << ")"; return os; } #endif /* _MATCHERS_H */