countBlackWhiteRun function

List<double> countBlackWhiteRun({
  1. required Position<double> origin,
  2. required Position<double> end,
  3. required BitMatrix matrix,
  4. required int length,
})

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];
}