83 {
86 int min_left = std::min(box1.
left(), box2.
left());
87 int max_right = std::max(box1.
right(), box2.
right());
88 if (xmin < min_left && xmax > max_right)
return kBadPriority;
89
90 float grade = 0.0f;
91
92 int width1 = box1.
width();
93 int width2 = box2.
width();
94 int min_width = std::min(width1, width2);
95 int overlap = -box1.
x_gap(box2);
96 if (overlap == min_width) {
97 grade += 100.0f;
98 } else {
99 if (2 * overlap > min_width) overlap += 2 * overlap - min_width;
100 if (overlap > 0) grade += overlap_knob * overlap;
101 }
102
103 if (width1 <= centered_maxwidth || width2 <= centered_maxwidth) {
104 grade += std::min(
static_cast<double>(
kCenterGradeCap), center_knob * abs(width1 - width2));
105 }
106
107 float width_change_grade = 20 - (max_right - min_left - std::max(width1, width2));
108 if (width_change_grade > 0.0f)
109 grade += width_change_grade * width_change_knob;
110 return grade;
111}
const double kBadPriority
const int kCenterGradeCap
int x_gap(const TBOX &box) const