bool StemDetection::isStem(Stem & stem) { int nRows = vBoard.size(), nCols = vBoard[0].size(); Point2i minX = stem.GetMinX(), maxX = stem.GetMaxX(); int height = stem.GetHeight(); for (int x = minX.x; x <= min(minX.x + height / 4, maxX.x); x++) { int dist = maximumCanGo(x, minX.y, staffLineHeight); if (dist >= 3 * staffLineHeight) return true; /*int tolerance = staffLineHeight; int xLeft = minX.y, xRight = minX.y; while (xLeft >= 0) { if (vBoard[x][xLeft] == BLACK) xLeft--; else if (tolerance > 0) { xLeft--; tolerance--; } else break; } xLeft++; while (xRight < nCols) { if (vBoard[x][xRight] == BLACK) xRight++; else if (tolerance > 0) { xRight++; tolerance--; } else break; } xRight--; if (xRight - xLeft + 1 >= 3 * staffLineHeight) return true;*/ } for (int x = maxX.x; x >= max(maxX.x - height / 4, minX.x); x--) { int dist = maximumCanGo(x, maxX.y, staffLineHeight); if (dist >= 3 * staffLineHeight) return true; /*int tolerance = staffLineHeight; int xLeft = maxX.y, xRight = maxX.y; while (xLeft >= 0) { if (vBoard[x][xLeft] == BLACK) xLeft--; else if (tolerance > 0) { xLeft--; tolerance--; } else break; } xLeft++; while (xRight < nCols) { if (vBoard[x][xRight] == BLACK) xRight++; else if (tolerance > 0) { xRight++; tolerance--; } else break; } xRight--; if (xRight - xLeft + 1 >= 3 * staffLineHeight) return true;*/ } return false; }