画线的另一种方式

时间:2016-05-27 16:34:12

标签: java matrix line draw ppm

我有一个生成.ppm文件的程序,上面有一堆黑点。我想要做的是在这些点之间绘制线条来构建图形,但是我想知道是否有办法直接操作.ppm的矩阵,而不是使用一些摆动方法。 我假设它需要一些嵌套循环,但我如何确定需要更改哪些位置以创建两个点之间的线?

(对于那些不知道的人来说,.ppm文件基本上是一个巨大的矩阵,每个位置都有3个RGB值,允许你逐个像素地绘制东西)

1 个答案:

答案 0 :(得分:0)

单像素厚度:

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

(注意这是C#语法;您可能需要次要更改才能将其转换为Java)