//Bresenham demo
// This is much like



void setup() {
  const int N = 3; // number of iterations
  int n[] = {N, 7, 12, 13, 1, 0, N - 1}; // Numerator of n/N step ratio, higest N in first column
  const int num = sizeof(n) / sizeof(n[0]);
  int D[num]; // Bresenham sum for decision rule 

  // scale and offset 
  const int scaleFactor = 1; // 2 for bresenham to handle 1/2
  const int offset = 0; //-N*scaleFactor; // -N*scaleFactor to make decision rule compare to zero

  Serial.begin(115200);

  Serial.print("It/n:");
  // Initialize to center the sub-steps
  for (int j = 0; j < num; ++j) {
    D[j] = N * scaleFactor / 2 + offset ; // center
    Serial.print("\t+");
    Serial.print(n[j]);
  }
  Serial.println();

  for (int i = 0; i < N; ++i) {
    Serial.print("i:");
    Serial.print(i);
    for (int j = 0; j < num; ++j) {
      Serial.print("\t");
      D[j] += scaleFactor * n[j];
      Serial.print(D[j]);
      if (D[j] >= N * scaleFactor + offset) {
        D[j] -= N * scaleFactor;
        Serial.print("*-");
        Serial.print(N * scaleFactor);
      }
    }
    Serial.println();
  }
  Serial.print("*: Decision to step & subtract ");
  Serial.print(N * scaleFactor);
  Serial.println();
}

void loop() {
}