2017-08-12 82 views
0

我目前有一个使用monogame的问题,我试图通过在数据数组本身内设置值来绘制一条线,而不是使用单色绘制API。使用一维数组绘制一条线

我使用Bresenhams line算法的修改版本,这似乎工作,如果我使用spritebatch绘制,但我希望使用数组设置像素颜色。

有被发现的有关坐标我monogame阵列的问题IM是1尺寸(宽*高):

 var data = new Microsoft.Xna.Framework.Color[width*height]; 
     //my 1 dimensional array 

     int dx = Math.Abs(point2.x - point1.x); 
     int dy = Math.Abs(point2.y - point1.y); 

     int sx = (point1.x < point2.x) ? 1 : -1; 
     int sy = (point1.y < point2.y) ? 1 : -1; 

     int err = dx - dy; 

     for(int i=1;i<data.Length;++i) 
     { 

      data[i] = color; // me setting the pixel value 


      if (point1.x == point2.x && point1.y == point2.x) 
      { 
       break; 
      } 

      int e2 = 2 * err; 

      if (e2 > -dy) 
      { 
       err = err - dy; 
       point1.x = point1.x + sx; 
      } 

      if (e2 < dx) 
      { 
       err = err + dx; 
       point1.y = point1.y + sy; 
      } 
     } 

有没有一种简单的方法来发现涉及point1.x像素和point1.y我的像素包含在一维数组中的位置。如果我有(5 * 5)或(宽*高)大小的数组(25),同时循环我如何知道当前循环计数器是否表示1D数组内的适当x,y位置?

我已经尝试将它转换为2D array,但我宁愿避免不必要的1D和2D数组之间转换的循环。

+1

'我== Y *宽+ x'什么检查呢?取决于如何构建1D阵列。 –

+0

好吧,试了一下,并做到了。如果您将它作为答案发布,我会接受它。非常感谢! – D3181

回答

1

您可以

if(i == point.y * width + point.x) 
{ 
    //do something 
}