2017-08-12 61 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 
}