countBlackWhiteRun function
Count changes between black and white segments in a BitMatrix along a given segment.
Implementation
List<double> countBlackWhiteRun({
required final Position<double> origin,
required final Position<double> end,
required final BitMatrix matrix,
required final int length,
}) {
final rise = end.y - origin.y;
final run = end.x - origin.x;
final towardsEnd = _countBlackWhiteRunTowardsPoint(
origin,
end,
matrix,
(length / 2).ceil(),
);
final awayFromEnd = _countBlackWhiteRunTowardsPoint(
origin,
Position<double>(origin.x - run, origin.y - rise),
matrix,
(length / 2).ceil(),
);
final middleValue = towardsEnd.removeAt(0) +
awayFromEnd.removeAt(0) -
1; // Substract one so we don't double count a pixel
return [...awayFromEnd, middleValue, ...towardsEnd];
}