| #define _MATCHERS_H |
#define _MATCHERS_H |
| |
|
| #include <vector> |
#include <vector> |
| |
#include <set> |
| /* Matchters */ |
/* Matchters */ |
| #include "PatMatch.h" |
#include "PatMatch.h" |
| #include "BitmapFont.h" |
#include "BitmapFont.h" |
| protected: |
protected: |
| int x,y; |
int x,y; |
| PatMatch pm; |
PatMatch pm; |
| |
int penalty; |
| public: |
public: |
| MatchResult(int xx, int yy,PatMatch& p) :x(xx),y(yy),pm(p){} |
MatchResult(int xx, int yy,const PatMatch& p,int penalty) :x(xx),y(yy),pm(p),penalty(penalty){} |
| |
std::vector<pixel> getPixels() const; |
| }; |
}; |
| |
|
| class Matchers { |
class Matchers { |
| friend ostream& operator<<(ostream &os,const Matchers &mt); |
friend ostream& operator<<(ostream &os,const Matchers &mt); |
| protected: |
protected: |
| vector<PatMatch> pm; |
std::vector<PatMatch> pm; |
| public: |
public: |
| Matchers(){ |
Matchers(); |
| pm.push_back(PatMatch(3,3, |
std::vector<MatchResult> findMatch(const BitmapFont& bf) const; |
| "..." |
std::vector<pixel> notCovered(const BitmapFont& bf) const; |
| ".@@" |
|
| "...", |
|
| 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,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<MatchResult> findMatch(const BitmapFont& bf){ |
|
| vector<MatchResult> mr; |
|
| vector<PatMatch>::iterator it; |
|
| for(it=pm.begin();it!=pm.end();it++) |
|
| for(int y= -1; y<bf.getHeight(); y++) |
|
| for(int x= -1;x<bf.getWidth();x++) |
|
| if(it->isMatch(bf,x,y)) |
|
| mr.push_back(MatchResult(x,y,*it)); |
|
| return mr; |
|
| } |
|
| bool coverCheck(const BitmapFont& bf){ |
|
| vector<MatchResult> mr=findMatch(bf); |
|
| vector<set<int> > pixel2match(bf.pixels.size()); |
|
| vector<set<int> > match2pixel(mr.size()); |
|
| vector<MatchResult>::iterator it; |
|
| for(it=mr.begin();it!=mr.end();it++){ |
|
| int n= it-mr-begin(); |
|
| set<pixel> ps; |
|
| hogehoge |
|
| match2pixel[n].swap(ps); |
|
| } |
|
| return true; |
|
| } |
|
| }; |
}; |
| ostream& operator<<(ostream &os,const Matchers &mt){ |
ostream& operator<<(ostream &os,const Matchers &mt); |
| os << "Matchers("; |
ostream& operator<<(ostream &os,const MatchResult &mr); |
| vector<PatMatch>::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 */ |
#endif /* _MATCHERS_H */ |