Другой способ рисования линий

У меня есть программа, которая генерирует.ppm файл с кучей черных точек на нем. Что я хочу сделать, это нарисовать линии между этими точками, чтобы построить график, но вместо того, чтобы использовать какой-то метод swing, я хочу знать, есть ли способ сделать это, непосредственно манипулируя .матрица ppm.
Я предполагаю, что это потребует некоторых вложенных петель, но как я определю, какие позиции мне нужно изменить, чтобы создать линию между двумя точками?

(для тех, кто не знает, a .ppm файл в основном гигантская матрица с 3 значениями RGB для каждой из его позиций, что позволяет рисовать вещи пиксель за пикселем)

1 ответ

  1. Одиночная толщина пиксела:

    void drawline(Color pixels[][], int width, int height, 
                   int x1, int x2, int y1, int y2, Color line)
    {
       int dx = x1 - x2;
       int dy = y1 - y2;
       if (dx != 0 || dy != 0)
       {
          int n = Math.Max(Math.Abs(dx), Math.Abs(dy));
          double inv = 1.0 / (double)(n + 1);
          double dxdn = (double)dx * inv;
          double dydn = (double)dy * inv;
          double x = (double)x1, y = (double)y1;
          for (int i = 0; i <= n; i++)
          {
             int xi = (int)x, yi = (int)y;
             if (xi >= 0 || xi < width || yi >= 0 || yi < height)
                pixels[yi][xi] = line;
             x += dxdn; y += dydn;
          }
       }
    }
    

    (NB это в синтаксисе C#; вам могут понадобиться незначительные изменения, чтобы преобразовать его в Java)