void format_ary(void) { memset(ary, 0xff, sizeof(ary)); /* White */ border(); crosses(); label(); }
void evalb::add_tree(parse_tree proposed, parse_tree gold) { static multi_transformer<annotation_remover, collinizer, empty_remover> trnsfm; proposed.transform(trnsfm); gold.transform(trnsfm); auto prop_const = get_constituents(proposed); auto gold_const = get_constituents(gold); uint64_t crossings = 0; for (const auto& guess : prop_const) { for (const auto& gold : gold_const) { if (crosses(guess, gold)) { ++crossings; break; } } } if (crossings == 0) ++zero_crossing_; crossed_ += crossings; ++total_trees_; proposed_total_ += prop_const.size(); uint64_t gold_total = gold_const.size(); uint64_t matched = 0; for (const auto& guess : prop_const) { auto it = gold_const.find(guess); if (it != gold_const.end()) { ++matched; gold_const.erase(it); } } if (matched == gold_total && matched == prop_const.size()) ++perfect_; gold_total_ += gold_total; proposed_correct_ += matched; }
bool Polygon2d::overlaps(Polygon2d p) { // does not seem to work // return overlaps(&p); for (int i=1;i<=p.vs.len;i++) if (crosses(p.linefrom(i))) return true; bool pin=true; bool thisin=true; for (int i=1;i<=p.vs.len && pin;i++) if (!contains(p.vs.num(i))) pin=false; for (int i=1;i<=vs.len && thisin;i++) if (!p.contains(vs.num(i))) thisin=false; if (pin) return container; // this polygon completely contains p if (thisin) return contained; return false; }