*** empty log message ***
#include "BitmapFont.h" #include "Matchers.h" #include <vector> std::vector<pixel> MatchResult::getPixels() const { return pm.getPixels(x,y); } Matchers::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(5,2, "..@@." ".@@..", SimpleAssumption((PtypeMask)(TatehidariMask|HidariMask),JointStart,2,0.5,225,1.7))); pm.push_back(PatMatch(4,2, "?*@*" "*@*?", SimpleAssumption((PtypeMask)(TatehidariMask|HidariMask),JointStart,1.5,0.5,225,1))); pm.push_back(PatMatch(4,3, "?*@*" "*@@*" "*@*?", SimpleAssumption((PtypeMask)(TatehidariMask|HidariMask),JointStart,1.5,0.5,225,1))); 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(5,3, "..@@." "@@@@@" ".@@..", Assumption() .add(SimpleAssumption(YokoMask,Mid,2,1,0,0)) .add(SimpleAssumption((PtypeMask)(TatehidariMask|HidariMask),Mid,2,1,250,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(5,3, "?...?" ".@@@." ".@@.?", SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),Start,1.5,0.5,270,2))); pm.push_back(PatMatch(5,4, "*@@*?" "?.@@." "?.@@." "??..?", SimpleAssumption(TenMask,End,2.5,2.5,300,2))); pm.push_back(PatMatch(4,3, "*.??" "*@*?" "?*@*", SimpleAssumption(TenMask,Start,1,1,315,1))); 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,5, ".@@." ".@@@" ".@@." ".@@." "....", 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)))); } std::vector<MatchResult> Matchers::findMatch(const BitmapFont& bf) const{ std::vector<MatchResult> mr; std::vector<PatMatch>::const_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++){ int penalty=it->matchPenalty(bf,x,y); if(penalty>=0) mr.push_back(MatchResult(x,y,*it,penalty)); } return mr; } std::vector<pixel> Matchers::notCovered(const BitmapFont& bf) const{ std::vector<MatchResult> mr=findMatch(bf); std::vector<std::set<int> > pixel2match(bf.getSize()); std::vector<std::set<int> > match2pixel(mr.size()); std::vector<MatchResult>::iterator it; for(it=mr.begin();it!=mr.end();it++){ int n= it-mr.begin(); std::vector<pixel> ps=(*it).getPixels(); std::vector<pixel>::iterator ips; for(ips=ps.begin();ips!=ps.end();ips++){ int m=bf.getIndex(*ips); std::cout << '(' << ips->first << ',' << ips->second << ")\n"; assert(m != -1); match2pixel[n].insert(m); pixel2match[m].insert(n); } } std::vector<pixel> ret; for(int i=0;i<bf.getPixelSize();i++){ if(pixel2match[i].empty()) { ret.push_back(bf.getPixelAt(i)); } } return ret; } ostream& operator<<(ostream &os,const Matchers &mt){ os << "Matchers("; std::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 << "," << mr.penalty << ")"; return os; }
ktanaka Powered by ViewCVS 1.0-dev |
ViewCVS and CVS Help |